Analisi di prove in situ con IPython

Pubblicato da Nicola Rainiero il 30-05-2013 (aggiornato il 12-04-2015)

Per una relazione geotecnica ho avuto a disposizione un campo di misure composto da: 6 CPTU, 1 DTM e 3 sondaggi. Una grande quantità di dati non c'è che dire! In quella occasione ho usato un software commerciale e un foglio di calcolo, perché il tempo era ridotto all'osso e soprattutto non avevo ancora scoperto IPython notebook. Vi mostro attraverso un breve video, quanto è facile da programmare e adatto a questo tipo di analisi.

Magari avrei potuto usare Octave (un clone di Matlab) per fare le analisi, ma probabilmente avrei perso tempo per niente. Vi faccio solo vedere la planimetria delle indagini:

Plan of investigations
Diagrams from CPTU1 log
Planimetria Diagrammi realizzati dalla CPTU1 (generati da IPython e Matplotlib)

L'idea di usare questa interfaccia mi è venuta seguendo un corso online di Coursera e chiamato High Performance Scientific Computing, Vedendo all'opera prima IPython e poi la sua interfaccia web Notebook non ho resistito alla tentazione di adattarlo alle esigenze della mia vecchia professione.

Citando l'home page del progetto, queste sono alcune sue caratteristiche:

  • Shell interattive potenti (da terminale e Qt-based).
  • Un blocco note basato sul browser con supporto al codice, testo, espressioni matematiche, grafici in linea ed altri contenuti multimediali.
  • Supporto per la visualizzazione di dati interattivi e l'uso di strumenti per la GUI.
  • Interpreti flessibili ed integrabili all'interno dei propri progetti.
  • Facile da usare, con strumenti ad alte prestazioni per il calcolo in parallelo.

Ad ogni modo non voglio annoiarvi con una lunga descrizione, così ho creato un video che mostra come importare il log di una CPTU (un semplice file di testo con le misure lette dallo strumento in funzione della profondità) e qualche grafico. Dopo il video, ci sono le istruzioni per installarlo in Ubuntu (o derivate) e per lanciarlo. (09/06/2013) Alternativamente lo si può usare online, senza installare alcun file ma previa registrazione su Wakari (il Free Plan prevede 512 MB di ram e 10 GB di spazio). Prima di passare al video però riporto due siti utili:


Il video: carico i dati del log di una CPTU e stampo i diagrammi usando IPython notebook (NOTA: se il contenuto multimediale non dovesse funzionare, prova questo link).

Installazione

Per prima cosa si installa IPython e Matplot:

sudo apt-get install ipython 
sudo apt-get install python-numpy
sudo apt-get install python-scipy
sudo apt-get install python-matplotlib

Poi si installa l'ultima versione di IPython (i seguenti comandi creeranno una nuova cartella denominata ipython):

git clone https://github.com/ipython/ipython.git
cd ipython
sudo python setup.py install
sudo python setup.py submodule
sudo python setup.py develop

Segue il file finale presente nel video (example_load_cptu_and_plot.ipynb):

{
"metadata": {
"name": "example_load_cptu_and_plot"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "heading",
"level": 1,
"metadata": {},
"source": [
"A short example"
]
},
{
"cell_type": "raw",
"metadata": {},
"source": [
"Import data from a text file (cptu1_log.txt is in the same directory). Here it is some rows:\n",
"# Depth (m)\tqc (MPa)\tfs (kPa)\tu (kPa) (The first row is commented with '#')\n",
"[...]\n",
"2\t0.07\t0.5\t30.5\n",
"2.02\t0.06\t1\t32.5\n",
"2.04\t0.07\t0.5\t35.5\n",
"2.06\t0.07\t0.5\t34\n",
"2.08\t0.07\t0.5\t32.5\n",
"2.1\t0.07\t0.5\t36.5\n",
"[...]\n",
"\n",
"So I need 4 arrays for saving all the columns. Note: \"SHIFT + RETURN\" executes the code."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"depth, qc, fs, u = loadtxt(\"cptu1_log.txt\", usecols = (0,1,2,3), unpack=True)"
],
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "raw",
"metadata": {},
"source": [
"3 plot: -depth vs qc, -depth vs fs, -depth vs u"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"figure(figsize=(15,7.5), dpi=300)\n",
"\n",
"subplot(1,3,1)\n",
"title('depth vs qc')\n",
"ylabel('m')\n",
"xlabel('MPa')\n",
"plot (qc, -depth, color=\"red\", linewidth=2.5, linestyle=\"-\")\n",
"\n",
"subplot(1,3,2)\n",
"title('depth vs fs')\n",
"ylabel('m')\n",
"xlabel('kPa')\n",
"plot (fs, -depth, color=\"black\", linewidth=2.5, linestyle=\"-\")\n",
"\n",
"subplot(1,3,3)\n",
"title('depth vs u')\n",
"ylabel('m')\n",
"xlabel('kPa')\n",
"plot (u, -depth, color=\"blue\", linewidth=2.5, linestyle=\"-\")"
],
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}



Potrebbero interessarti anche:

Nicola Rainiero

Ingegnere civile specializzato in geotecnica con l'ambizione di facilitare la propria attività lavorativa usando e creando software libero per un sapere condiviso e collettivo. Mi occupo anche di energie rinnovabili ed in particolare di geotermia a bassa entalpia. Sono da sempre appassionato di web design e modellazione 3D.

Aggiungi un commento

Il contenuto di questo campo è privato e non verrà mostrato pubblicamente.

Plain text

  • Nessun tag HTML consentito.
  • Indirizzi web ed indirizzi e-mail diventano automaticamente dei link.
  • Linee e paragrafi vanno a capo automaticamente.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.