In [1]:
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
import pandas as pd
import pathlib
In [2]:
%matplotlib inline
Vykreslení histogramu¶
- data v textovém souboru - 1 100 000 hodnot
- vykreslit histogram (např. 50 sloupců)
- vykreslit normální normované rozdelení
In [3]:
x = np.loadtxt('data.txt')
x.shape
Out[3]:
In [4]:
fig, ax = plt.subplots(figsize=(8,4), dpi=100, tight_layout=True)
ax.hist(x, bins=50, density=True, ec='k', alpha=.5)
x_rv = np.linspace(-4, 4, 1000)
rv = stats.norm(0, 1)
ax.plot(x_rv, rv.pdf(x_rv), 'r-', lw=.7)
ax.set_xlabel('$x$')
ax.set_ylabel('relativní četnost');
Porovnání rychlosti načítání¶
- pandas read_csv vs numpy loadtxt
In [5]:
%timeit np.loadtxt('data.txt')
In [6]:
%timeit pd.read_csv('data.txt', header=None)
- pokud potřebuji data znovu načítat, může být vhodné si je při prvním čtení přeuložit do jiného formátu
- np.save - npy soubor
- pd.to_pickle - pickle soubor
- opětovné načtení je značně rychlejší
- uložená data mají pro tuto úlohu cca 1/3 původní velikosti
In [7]:
np.save('data.npy', x)
pd.to_pickle(x, 'data.pkl')
for f in ['data.txt', 'data.npy', 'data.pkl']:
print(f, pathlib.Path(f).stat().st_size / 1024**2, 'MB')
In [8]:
%timeit np.load('data.npy')
In [9]:
%timeit pd.read_pickle('data.pkl')
- načtení pomocí základních operací v Pythonu - cyklus for, list, split, float
In [10]:
%%time
with open('data.txt', 'r') as f:
data = [float(i) for i in f.read().split()]
#data = f.read().split()
#data = np.array(data, dtype=float)
print(data[:5])
In [ ]: