1. 程式人生 > 程式設計 >python:HDF和CSV儲存優劣對比分析

python:HDF和CSV儲存優劣對比分析

小資料用csv,大資料用h5

結論1:幾百KB以上的資料都用h5比較好

結論2:幾KB的資料h5反而很慢

程式

import pandas as pd
import numpy as np
from wja.wja_tool import test_time as tt
from wja import wja_tool as tool

df = tool.generate_sampleDF(row,col)

tt().run()
df.to_csv('try.csv')
tt().end()

tt().run()
df.to_hdf('try.h5','df',mode='w')
tt().end() 

tt().run()
df1 = pd.read_csv('try.csv')
tt().end()

tt().run()
df2 = pd.read_hdf('try.h5')
tt().end()

對比1:資料10*1

df = tool.generate_sampleDF(10,1)

python:HDF和CSV儲存優劣對比分析

# csv儲存
# hdf儲存
# csv讀取
# hdf讀取
程式用時:0.015
程式用時:0.9985
程式用時:0.009
程式用時:0.0369

對比2:資料100*10

df = tool.generate_sampleDF(100,10)

python:HDF和CSV儲存優劣對比分析

# csv儲存
# hdf儲存
# csv讀取
# hdf讀取
程式用時:0.017
程式用時:1.1016
程式用時:0.01
程式用時:0.013

對比3:資料1000*100

df = tool.generate_sampleDF(1000,100)

python:HDF和CSV儲存優劣對比分析

# csv儲存
# hdf儲存
# csv讀取
# hdf讀取
程式用時:0.2383
程式用時:1.0308
程式用時:0.0499
程式用時:0.016

對比4:資料10000*100

df = tool.generate_sampleDF(10000,100)

python:HDF和CSV儲存優劣對比分析

# csv儲存
# hdf儲存
# csv讀取
# hdf讀取
程式用時:2.0895
程式用時:1.0073
程式用時:0.4055
程式用時:0.0169

對比5:資料10000*1000

# csv儲存
# hdf儲存
# csv讀取
# hdf讀取
df = tool.generate_sampleDF(10000,1000)

python:HDF和CSV儲存優劣對比分析

# csv儲存
# hdf儲存
# csv讀取
# hdf讀取
程式用時:23.5693
程式用時:2.2057
程式用時:3.3697
程式用時:0.0619

補充知識:python:n個點m條邊有權無向圖

n個點:有個位置

m條邊:兩點之間存在m條邊有權值

有權:每條邊代表一個數值

無向:沒有規定行進方向

規定:

1、兩點之間的行進路線,最終權值為所經過的邊的權值的最大值

2、兩點之間走法不止一個,最終取最小值為最終走法

問:

兩點之間的最終權值為多少

python:HDF和CSV儲存優劣對比分析

如上圖,我們可以將其寫為列表形式,前兩位是從小到大的的兩個點,最後一個代表權值,如
[1,2,2] 代表1和2之間的權值是2,以此類推

n,m = 5,10
road = [[1,2],[1,3,3],4,7],5,[2,4],9],5],[3,[4,3]]

def hold(list1,list2):
  jiaoji = list(set(list1)&set(list2))
  need = [i for i in set(list1+list2) if i not in jiaoji]
  need.sort()
  return need

def get(road):
  option = {}
  for i in range (m):
    option[(road[i][0],road[i][1])] = [road[i][2]]
  for i in range (m):
    for j in range(i+1,m):
      dot = hold(road[i][:2],road[j][:2])
      if len(dot)==2:
        if (dot[0],dot[1]) in option.keys():
          option[(dot[0],dot[1])].append(max([road[i][2],road[j][2]]))
        else:
          option[(dot[0],dot[1])] = []
          option[(dot[0],road[j][2]]))
  road_new = []
  for i in option.items():
    road_new.append(list(i[0])+[min(i[1])])
  if road==road_new:
    print(road_new)
    return road_new
  return get(road_new)

輸出結果

所有可能的走法如下,並且最後一位輸出最短的權值路徑。

例如 [2,3]:代表 從2走到3最短的權值路徑是3,對應路徑從圖中可以到是2-1-3

例如 [3,3]:代表 從3走到5最短的權值路徑是3,對應路徑從圖中可以到是3-1-5

[[1,
[2,3]]

以上這篇python:HDF和CSV儲存優劣對比分析就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。