.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "tutorials/ch1_fundamentals/ch1_2a_data_manipulation.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note Click :ref:`here ` to download the full example code .. rst-class:: sphx-glr-example-title .. _sphx_glr_tutorials_ch1_fundamentals_ch1_2a_data_manipulation.py: 1.2: Data Structure and Manipulation ------------------------------------ .. GENERATED FROM PYTHON SOURCE LINES 6-15 .. code-block:: python3 # Importing GemPy import gempy as gp import gempy # Importing auxiliary libraries import numpy as np import pandas as pd pd.set_option('precision', 2) .. GENERATED FROM PYTHON SOURCE LINES 16-27 Series ~~~~~~ Series is the object that contains the properties associated with each independent scalar field. Right now it is simply the order of the series (which is inferred by the index order). But in the future will be add the unconformity relation or perhaps the type of interpolator Series and Faults classes are quite entangled since fault are a view of series .. GENERATED FROM PYTHON SOURCE LINES 29-33 .. code-block:: python3 faults = gp.Faults() series = gp.Series(faults) series.df .. raw:: html
order_series BottomRelation isActive
Default series 1 Erosion False


.. GENERATED FROM PYTHON SOURCE LINES 34-36 We can modify the series bt using ``set_series_index``: .. GENERATED FROM PYTHON SOURCE LINES 38-41 .. code-block:: python3 series.set_series_index(['foo', 'foo2', 'foo5', 'foo7']) series .. raw:: html
order_series BottomRelation isActive
foo 1 Erosion False
foo2 2 Erosion False
foo5 3 Erosion False
foo7 4 Erosion False


.. GENERATED FROM PYTHON SOURCE LINES 42-45 The index of series are pandas categories. These provides quite handy backend functionality (see pandas.Categorical). .. GENERATED FROM PYTHON SOURCE LINES 47-49 .. code-block:: python3 series.df.index .. rst-class:: sphx-glr-script-out Out: .. code-block:: none CategoricalIndex(['foo', 'foo2', 'foo5', 'foo7'], categories=['foo', 'foo2', 'foo5', 'foo7'], ordered=False, dtype='category') .. GENERATED FROM PYTHON SOURCE LINES 50-52 For adding new series: .. GENERATED FROM PYTHON SOURCE LINES 54-57 .. code-block:: python3 series.add_series('foo3') series .. raw:: html
order_series BottomRelation isActive
foo 1 Erosion False
foo2 2 Erosion False
foo5 3 Erosion False
foo7 4 Erosion False
foo3 5 Erosion False


.. GENERATED FROM PYTHON SOURCE LINES 58-60 Delete series .. GENERATED FROM PYTHON SOURCE LINES 62-65 .. code-block:: python3 series.delete_series('foo3') series .. raw:: html
order_series BottomRelation isActive
foo 1 Erosion False
foo2 2 Erosion False
foo5 3 Erosion False
foo7 4 Erosion False


.. GENERATED FROM PYTHON SOURCE LINES 66-68 Rename series: .. GENERATED FROM PYTHON SOURCE LINES 70-73 .. code-block:: python3 series.rename_series({'foo': 'boo'}) series .. raw:: html
order_series BottomRelation isActive
boo 1 Erosion False
foo2 2 Erosion False
foo5 3 Erosion False
foo7 4 Erosion False


.. GENERATED FROM PYTHON SOURCE LINES 74-76 Reorder series: .. GENERATED FROM PYTHON SOURCE LINES 78-81 .. code-block:: python3 series.reorder_series(['foo2', 'boo', 'foo7', 'foo5']) series .. raw:: html
order_series BottomRelation isActive
foo2 1 Erosion False
boo 2 Erosion False
foo7 3 Erosion False
foo5 4 Erosion False


.. GENERATED FROM PYTHON SOURCE LINES 82-90 Faults ~~~~~~ The *df faults* is used to characterize which *mathematical series* behave as fault and if mentioned faults are finite or infinite. Both dataframes get updated automatically as we modify the series object linked to the fault object (by passing it when a Series object is created). .. GENERATED FROM PYTHON SOURCE LINES 92-94 .. code-block:: python3 faults .. raw:: html
isFault isFinite
foo2 False False
boo False False
foo7 False False
foo5 False False


.. GENERATED FROM PYTHON SOURCE LINES 95-99 Finally we have the *faults relations df* which captures which *mathematical series* a given fault offset in order to reproduce complex faulting networks .. GENERATED FROM PYTHON SOURCE LINES 101-103 .. code-block:: python3 faults.faults_relations_df .. raw:: html
foo2 boo foo7 foo5
foo2 False False False False
boo False False False False
foo7 False False False False
foo5 False False False False


.. GENERATED FROM PYTHON SOURCE LINES 104-106 We can use ``set_is_fault`` to choose which of our series are faults: .. GENERATED FROM PYTHON SOURCE LINES 108-110 .. code-block:: python3 faults.set_is_fault(['boo']) .. raw:: html
isFault isFinite
foo2 False False
boo True False
foo7 False False
foo5 False False


.. GENERATED FROM PYTHON SOURCE LINES 111-113 Similar thing for the fault relations: .. GENERATED FROM PYTHON SOURCE LINES 115-121 .. code-block:: python3 fr = np.zeros((4, 4)) fr[2, 2] = True fr[1, 2] = True faults.set_fault_relation(fr) .. raw:: html
foo2 boo foo7 foo5
foo2 False False False False
boo False False True False
foo7 False False False False
foo5 False False False False


.. GENERATED FROM PYTHON SOURCE LINES 122-125 Now if we change the series df and we update the series already defined will conserve their values while the new ones will be set to false: .. GENERATED FROM PYTHON SOURCE LINES 127-129 .. code-block:: python3 series.add_series('foo20') .. raw:: html
order_series BottomRelation isActive
foo2 1 Erosion False
boo 2 Erosion False
foo7 3 Erosion False
foo5 4 Erosion False
foo20 5 Erosion False


.. GENERATED FROM PYTHON SOURCE LINES 130-132 .. code-block:: python3 series .. raw:: html
order_series BottomRelation isActive
foo2 1 Erosion False
boo 2 Erosion False
foo7 3 Erosion False
foo5 4 Erosion False
foo20 5 Erosion False


.. GENERATED FROM PYTHON SOURCE LINES 133-135 .. code-block:: python3 faults .. raw:: html
isFault isFinite
foo2 False False
boo True False
foo7 False False
foo5 False False
foo20 False False


.. GENERATED FROM PYTHON SOURCE LINES 136-138 .. code-block:: python3 faults.faults_relations_df .. raw:: html
foo2 boo foo7 foo5 foo20
foo2 False False False False False
boo False False True False False
foo7 False False False False False
foo5 False False False False False
foo20 False False False False False


.. GENERATED FROM PYTHON SOURCE LINES 139-142 When we add new series the values switch to NaN. We will be careful not having any NaNs in the DataFrames or we will raise errors down the line. .. GENERATED FROM PYTHON SOURCE LINES 144-146 .. code-block:: python3 faults.set_is_fault() .. raw:: html
isFault isFinite
foo2 False False
boo True False
foo7 False False
foo5 False False
foo20 False False


.. GENERATED FROM PYTHON SOURCE LINES 147-149 .. code-block:: python3 faults.set_fault_relation() .. raw:: html
foo2 boo foo7 foo5 foo20
foo2 False False False False False
boo False False False False False
foo7 False False False False False
foo5 False False False False False
foo20 False False False False False


.. GENERATED FROM PYTHON SOURCE LINES 150-161 Surfaces: ~~~~~~~~~ The *df surfaces* contains three properties. *id* refers to the order of the surfaces on the sequential pile, i.e. the strict order of computation. *values* on the other hand is the final value that each voxel will have after discretization. This may be useful for example in the case we want to map a specific geophysical property (such as density) to a given unit. By default both are the same since to discretize lithological units the value is arbitrary. .. GENERATED FROM PYTHON SOURCE LINES 164-170 From an empty df ^^^^^^^^^^^^^^^^ The Surfaces class needs to have an associate series object. This will limit the name of the series since they are a ``pandas.Categorical``\ . .. GENERATED FROM PYTHON SOURCE LINES 172-174 .. code-block:: python3 surfaces = gp.Surfaces(series) .. GENERATED FROM PYTHON SOURCE LINES 175-178 We can set any number of formations by passing a list with the names. By default they will take the name or the first series. .. GENERATED FROM PYTHON SOURCE LINES 180-182 .. code-block:: python3 surfaces.set_surfaces_names(['foo', 'foo2', 'foo5']) .. raw:: html
surface series order_surfaces color id
0 foo foo20 1 #015482 1
1 foo2 foo20 2 #9f0052 2
2 foo5 foo20 3 #ffbe00 3


.. GENERATED FROM PYTHON SOURCE LINES 183-185 .. code-block:: python3 series .. raw:: html
order_series BottomRelation isActive
foo2 1 Erosion False
boo 2 Erosion False
foo7 3 Erosion False
foo5 4 Erosion False
foo20 5 Erosion False


.. GENERATED FROM PYTHON SOURCE LINES 186-188 We can add new formations: .. GENERATED FROM PYTHON SOURCE LINES 190-193 .. code-block:: python3 surfaces.add_surface(['feeeee']) surfaces .. raw:: html
surface series order_surfaces color id
0 foo foo20 1 #015482 1
1 foo2 foo20 2 #9f0052 2
2 foo5 foo20 3 #ffbe00 3
3 feeeee foo20 4 #728f02 4


.. GENERATED FROM PYTHON SOURCE LINES 194-197 The column formation is also a ''pandas.Categorical''\ . This will be important for the Data classes (surface\_points and Orientations) .. GENERATED FROM PYTHON SOURCE LINES 199-201 .. code-block:: python3 surfaces.df['surface'] .. rst-class:: sphx-glr-script-out Out: .. code-block:: none 0 foo 1 foo2 2 foo5 3 feeeee Name: surface, dtype: object .. GENERATED FROM PYTHON SOURCE LINES 202-204 .. code-block:: python3 surfaces .. raw:: html
surface series order_surfaces color id
0 foo foo20 1 #015482 1
1 foo2 foo20 2 #9f0052 2
2 foo5 foo20 3 #ffbe00 3
3 feeeee foo20 4 #728f02 4


.. GENERATED FROM PYTHON SOURCE LINES 205-210 Set values ~~~~~~~~~~ To set the values we do it with the following method .. GENERATED FROM PYTHON SOURCE LINES 212-214 .. code-block:: python3 surfaces.set_surfaces_values([2, 2, 2, 5]) .. raw:: html
surface series order_surfaces color id value_0
0 foo foo20 1 #015482 1 2
1 foo2 foo20 2 #9f0052 2 2
2 foo5 foo20 3 #ffbe00 3 2
3 feeeee foo20 4 #728f02 4 5


.. GENERATED FROM PYTHON SOURCE LINES 215-217 .. code-block:: python3 surfaces .. raw:: html
surface series order_surfaces color id value_0
0 foo foo20 1 #015482 1 2
1 foo2 foo20 2 #9f0052 2 2
2 foo5 foo20 3 #ffbe00 3 2
3 feeeee foo20 4 #728f02 4 5


.. GENERATED FROM PYTHON SOURCE LINES 218-223 Set values with a given name: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ We can give specific names to the properties (i.e. density) .. GENERATED FROM PYTHON SOURCE LINES 225-227 .. code-block:: python3 surfaces.add_surfaces_values([[2, 2, 2, 6], [2, 2, 1, 8]], ['val_foo', 'val2_foo']) .. raw:: html
surface series order_surfaces color id value_0 val_foo val2_foo
0 foo foo20 1 #015482 1 2 2 2
1 foo2 foo20 2 #9f0052 2 2 2 2
2 foo5 foo20 3 #ffbe00 3 2 2 1
3 feeeee foo20 4 #728f02 4 5 6 8


.. GENERATED FROM PYTHON SOURCE LINES 228-230 .. code-block:: python3 surfaces .. raw:: html
surface series order_surfaces color id value_0 val_foo val2_foo
0 foo foo20 1 #015482 1 2 2 2
1 foo2 foo20 2 #9f0052 2 2 2 2
2 foo5 foo20 3 #ffbe00 3 2 2 1
3 feeeee foo20 4 #728f02 4 5 6 8


.. GENERATED FROM PYTHON SOURCE LINES 231-236 Delete formations values ~~~~~~~~~~~~~~~~~~~~~~~~ To delete a full property: .. GENERATED FROM PYTHON SOURCE LINES 238-240 .. code-block:: python3 surfaces.delete_surface_values(['val_foo', 'value_0']) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none True .. GENERATED FROM PYTHON SOURCE LINES 241-244 One of the formations must be set be the basement: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. GENERATED FROM PYTHON SOURCE LINES 246-249 .. code-block:: python3 surfaces.set_basement() surfaces .. raw:: html
surface series order_surfaces color id val2_foo
0 foo foo20 1 #015482 1 2
1 foo2 foo20 2 #9f0052 2 2
2 foo5 foo20 3 #ffbe00 3 1
3 feeeee foo20 4 #728f02 4 8


.. GENERATED FROM PYTHON SOURCE LINES 250-256 Set formation values ^^^^^^^^^^^^^^^^^^^^ We can also use ``set_surface_values`` instead adding. This will delete the previous properties and add the new one .. GENERATED FROM PYTHON SOURCE LINES 258-261 .. code-block:: python3 surfaces.set_surfaces_values([[2, 2, 2, 6], [2, 2, 1, 8]], ['val_foo', 'val2_foo']) surfaces .. raw:: html
surface series order_surfaces color id val_foo val2_foo
0 foo foo20 1 #015482 1 2 2
1 foo2 foo20 2 #9f0052 2 2 2
2 foo5 foo20 3 #ffbe00 3 2 1
3 feeeee foo20 4 #728f02 4 6 8


.. GENERATED FROM PYTHON SOURCE LINES 262-267 The last property is the correspondant series that each formation belong to. ``series`` and ``formation`` are pandas categories. To get a overview of what this mean check https://pandas.pydata.org/pandas-docs/stable/categorical.html. .. GENERATED FROM PYTHON SOURCE LINES 269-271 .. code-block:: python3 surfaces.df['series'] .. rst-class:: sphx-glr-script-out Out: .. code-block:: none 0 foo20 1 foo20 2 foo20 3 foo20 Name: series, dtype: category Categories (5, object): ['foo2', 'boo', 'foo7', 'foo5', 'foo20'] .. GENERATED FROM PYTHON SOURCE LINES 272-274 .. code-block:: python3 surfaces.df['surface'] .. rst-class:: sphx-glr-script-out Out: .. code-block:: none 0 foo 1 foo2 2 foo5 3 feeeee Name: surface, dtype: object .. GENERATED FROM PYTHON SOURCE LINES 275-278 Map series to formation ~~~~~~~~~~~~~~~~~~~~~~~ .. GENERATED FROM PYTHON SOURCE LINES 281-283 To map a series to a formation we can do it by passing a dict: .. GENERATED FROM PYTHON SOURCE LINES 285-287 .. code-block:: python3 surfaces .. raw:: html
surface series order_surfaces color id val_foo val2_foo
0 foo foo20 1 #015482 1 2 2
1 foo2 foo20 2 #9f0052 2 2 2
2 foo5 foo20 3 #ffbe00 3 2 1
3 feeeee foo20 4 #728f02 4 6 8


.. GENERATED FROM PYTHON SOURCE LINES 288-290 .. code-block:: python3 series .. raw:: html
order_series BottomRelation isActive
foo2 1 Erosion False
boo 2 Erosion False
foo7 3 Erosion False
foo5 4 Erosion False
foo20 5 Erosion False


.. GENERATED FROM PYTHON SOURCE LINES 291-294 If a series does not exist in the ``Series`` object, we rise a warning and we set those formations to nans .. GENERATED FROM PYTHON SOURCE LINES 296-298 .. code-block:: python3 d = {"foo7": 'foo', "booX": ('foo2', 'foo5', 'fee')} .. GENERATED FROM PYTHON SOURCE LINES 299-301 .. code-block:: python3 surfaces.map_series(d) .. raw:: html
surface series order_surfaces color id val_foo val2_foo
0 foo foo7 1 #015482 1 2 2
1 foo2 foo20 1 #9f0052 2 2 2
2 foo5 foo20 2 #ffbe00 3 2 1
3 feeeee foo20 3 #728f02 4 6 8


.. GENERATED FROM PYTHON SOURCE LINES 302-304 .. code-block:: python3 surfaces.map_series({"foo7": 'foo', "boo": ('foo2', 'foo5', 'fee')}) .. raw:: html
surface series order_surfaces color id val_foo val2_foo
1 foo2 boo 1 #9f0052 1 2 2
2 foo5 boo 2 #ffbe00 2 2 1
0 foo foo7 1 #015482 3 2 2
3 feeeee foo20 1 #728f02 4 6 8


.. GENERATED FROM PYTHON SOURCE LINES 305-307 .. code-block:: python3 surfaces .. raw:: html
surface series order_surfaces color id val_foo val2_foo
1 foo2 boo 1 #9f0052 1 2 2
2 foo5 boo 2 #ffbe00 2 2 1
0 foo foo7 1 #015482 3 2 2
3 feeeee foo20 1 #728f02 4 6 8


.. GENERATED FROM PYTHON SOURCE LINES 308-311 An advantage of categories is that they are order so no we can tidy the df by series and formation .. GENERATED FROM PYTHON SOURCE LINES 314-317 Modify surface name ~~~~~~~~~~~~~~~~~~~ .. GENERATED FROM PYTHON SOURCE LINES 319-321 .. code-block:: python3 surfaces.rename_surfaces({'foo2': 'lala'}) .. raw:: html
surface series order_surfaces color id val_foo val2_foo
1 lala boo 1 #9f0052 1 2 2
2 foo5 boo 2 #ffbe00 2 2 1
0 foo foo7 1 #015482 3 2 2
3 feeeee foo20 1 #728f02 4 6 8


.. GENERATED FROM PYTHON SOURCE LINES 322-324 .. code-block:: python3 surfaces .. raw:: html
surface series order_surfaces color id val_foo val2_foo
1 lala boo 1 #9f0052 1 2 2
2 foo5 boo 2 #ffbe00 2 2 1
0 foo foo7 1 #015482 3 2 2
3 feeeee foo20 1 #728f02 4 6 8


.. GENERATED FROM PYTHON SOURCE LINES 325-327 .. code-block:: python3 surfaces.df.loc[2, 'val_foo'] = 22 .. GENERATED FROM PYTHON SOURCE LINES 328-330 .. code-block:: python3 surfaces .. raw:: html
surface series order_surfaces color id val_foo val2_foo
1 lala boo 1 #9f0052 1 2 2
2 foo5 boo 2 #ffbe00 2 22 1
0 foo foo7 1 #015482 3 2 2
3 feeeee foo20 1 #728f02 4 6 8


.. GENERATED FROM PYTHON SOURCE LINES 331-334 Modify surface color ~~~~~~~~~~~~~~~~~~~~ .. GENERATED FROM PYTHON SOURCE LINES 337-340 The surfaces DataFrame also contains a column for the color in which the surfaces are displayed. To change the color, call .. GENERATED FROM PYTHON SOURCE LINES 342-344 .. code-block:: python3 surfaces.colors.change_colors() .. rst-class:: sphx-glr-script-out Out: .. code-block:: none Click to select new colors. VBox(children=(ColorPicker(value='#015482', description='foo'), ColorPicker(value='#9f0052', description='foo2'), ColorPicker(value='#ffbe00', description='foo5'), ColorPicker(value='#728f02', description='feeeee'))) .. GENERATED FROM PYTHON SOURCE LINES 345-349 This allow to change the colors interactively. If you already know which colors you want to use, you can also update them with a dictionary mapping the surface name to a hex color string: .. GENERATED FROM PYTHON SOURCE LINES 351-354 .. code-block:: python3 new_colors = {'foo': '#ff8000', 'foo5': '#4741be'} surfaces.colors.change_colors(new_colors) .. GENERATED FROM PYTHON SOURCE LINES 355-365 Data ~~~~ surface\_points ^^^^^^^^^^^^^^^ These two DataFrames (*df* from now on) will contain the individual information of each point at an interface or orientation. Some properties of this table are mapped from the *df* below. .. GENERATED FROM PYTHON SOURCE LINES 367-369 .. code-block:: python3 surface_points = gempy.core.data_modules.geometric_data.SurfacePoints(surfaces) .. GENERATED FROM PYTHON SOURCE LINES 370-372 .. code-block:: python3 surface_points .. raw:: html
X Y Z smooth surface


.. GENERATED FROM PYTHON SOURCE LINES 373-376 .. code-block:: python3 surface_points.set_surface_points(pd.DataFrame(np.random.rand(6, 3)), ['foo', 'foo5', 'lala', 'foo5', 'lala', 'feeeee']) .. raw:: html
X Y Z smooth surface
0 0.39 0.41 0.82 2.00e-06 foo
1 0.69 0.89 0.06 2.00e-06 foo5
2 0.53 0.55 0.03 2.00e-06 lala
3 0.02 0.23 0.55 2.00e-06 foo5
4 0.95 0.83 0.94 2.00e-06 lala
5 0.45 0.66 0.41 2.00e-06 feeeee


.. GENERATED FROM PYTHON SOURCE LINES 377-379 .. code-block:: python3 surface_points .. raw:: html
X Y Z smooth surface
0 0.39 0.41 0.82 2.00e-06 foo
1 0.69 0.89 0.06 2.00e-06 foo5
2 0.53 0.55 0.03 2.00e-06 lala
3 0.02 0.23 0.55 2.00e-06 foo5
4 0.95 0.83 0.94 2.00e-06 lala
5 0.45 0.66 0.41 2.00e-06 feeeee


.. GENERATED FROM PYTHON SOURCE LINES 380-383 .. code-block:: python3 surface_points.map_data_from_surfaces(surfaces, 'series') surface_points .. raw:: html
X Y Z smooth surface
0 0.39 0.41 0.82 2.00e-06 foo
1 0.69 0.89 0.06 2.00e-06 foo5
2 0.53 0.55 0.03 2.00e-06 lala
3 0.02 0.23 0.55 2.00e-06 foo5
4 0.95 0.83 0.94 2.00e-06 lala
5 0.45 0.66 0.41 2.00e-06 feeeee


.. GENERATED FROM PYTHON SOURCE LINES 384-387 .. code-block:: python3 surface_points.map_data_from_surfaces(surfaces, 'id') surface_points .. raw:: html
X Y Z smooth surface
0 0.39 0.41 0.82 2.00e-06 foo
1 0.69 0.89 0.06 2.00e-06 foo5
2 0.53 0.55 0.03 2.00e-06 lala
3 0.02 0.23 0.55 2.00e-06 foo5
4 0.95 0.83 0.94 2.00e-06 lala
5 0.45 0.66 0.41 2.00e-06 feeeee


.. GENERATED FROM PYTHON SOURCE LINES 388-390 .. code-block:: python3 series .. raw:: html
order_series BottomRelation isActive
foo2 1 Erosion False
boo 2 Erosion False
foo7 3 Erosion False
foo5 4 Erosion False
foo20 5 Erosion False


.. GENERATED FROM PYTHON SOURCE LINES 391-394 .. code-block:: python3 surface_points.map_data_from_series(series, 'order_series') surface_points .. raw:: html
X Y Z smooth surface
0 0.39 0.41 0.82 2.00e-06 foo
1 0.69 0.89 0.06 2.00e-06 foo5
2 0.53 0.55 0.03 2.00e-06 lala
3 0.02 0.23 0.55 2.00e-06 foo5
4 0.95 0.83 0.94 2.00e-06 lala
5 0.45 0.66 0.41 2.00e-06 feeeee


.. GENERATED FROM PYTHON SOURCE LINES 395-398 .. code-block:: python3 surface_points.sort_table() surface_points .. raw:: html
X Y Z smooth surface
2 0.53 0.55 0.03 2.00e-06 lala
4 0.95 0.83 0.94 2.00e-06 lala
1 0.69 0.89 0.06 2.00e-06 foo5
3 0.02 0.23 0.55 2.00e-06 foo5
0 0.39 0.41 0.82 2.00e-06 foo
5 0.45 0.66 0.41 2.00e-06 feeeee


.. GENERATED FROM PYTHON SOURCE LINES 399-401 .. code-block:: python3 faults .. raw:: html
isFault isFinite
foo2 False False
boo True False
foo7 False False
foo5 False False
foo20 False False


.. GENERATED FROM PYTHON SOURCE LINES 402-405 Orientations ~~~~~~~~~~~~ .. GENERATED FROM PYTHON SOURCE LINES 407-409 .. code-block:: python3 orientations = gempy.core.data_modules.geometric_data.Orientations(surfaces) .. GENERATED FROM PYTHON SOURCE LINES 410-412 .. code-block:: python3 orientations .. raw:: html
X Y Z G_x G_y G_z smooth surface


.. GENERATED FROM PYTHON SOURCE LINES 413-416 Set values passing pole vectors: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. GENERATED FROM PYTHON SOURCE LINES 418-423 .. code-block:: python3 orientations.set_orientations(np.random.rand(6, 3) * 10, np.random.rand(6, 3), surface=['foo', 'foo5', 'lala', 'foo5', 'lala', 'feeeee']) .. GENERATED FROM PYTHON SOURCE LINES 424-426 .. code-block:: python3 orientations .. raw:: html
X Y Z G_x G_y G_z smooth surface
0 8.48 3.08 8.24 0.40 0.06 0.37 0.01 foo
1 6.87 0.41 8.03 0.84 0.27 0.31 0.01 foo5
2 8.21 3.42 1.50 0.89 0.56 0.38 0.01 lala
3 9.39 9.91 0.13 0.72 0.84 0.38 0.01 foo5
4 2.07 8.72 3.94 0.36 0.70 0.93 0.01 lala
5 2.60 0.10 4.96 1.00 0.75 0.97 0.01 feeeee


.. GENERATED FROM PYTHON SOURCE LINES 427-430 Set values pasing orientation data: azimuth, dip, pole (dip direction) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. GENERATED FROM PYTHON SOURCE LINES 432-437 .. code-block:: python3 orientations.set_orientations(np.random.rand(6, 3) * 10, orientation=np.random.rand(6, 3) * 20, surface=['foo', 'foo5', 'lala', 'foo5', 'lala', 'feeeee']) .. GENERATED FROM PYTHON SOURCE LINES 438-440 .. code-block:: python3 orientations .. raw:: html
X Y Z G_x G_y G_z smooth surface
0 8.33 8.79 5.68 0.43 4.03 12.22 0.01 foo
1 8.25 6.22 5.13 0.02 0.06 7.72 0.01 foo5
2 3.37 6.46 0.18 0.69 5.60 16.39 0.01 lala
3 3.82 1.27 8.42 0.15 4.21 13.70 0.01 foo5
4 5.79 9.10 0.89 0.54 6.43 18.63 0.01 lala
5 2.46 3.97 8.81 0.02 0.33 4.14 0.01 feeeee


.. GENERATED FROM PYTHON SOURCE LINES 441-444 Mapping data from the other df ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. GENERATED FROM PYTHON SOURCE LINES 446-449 .. code-block:: python3 orientations.map_data_from_surfaces(surfaces, 'series') orientations .. raw:: html
X Y Z G_x G_y G_z smooth surface
0 8.33 8.79 5.68 0.43 4.03 12.22 0.01 foo
1 8.25 6.22 5.13 0.02 0.06 7.72 0.01 foo5
2 3.37 6.46 0.18 0.69 5.60 16.39 0.01 lala
3 3.82 1.27 8.42 0.15 4.21 13.70 0.01 foo5
4 5.79 9.10 0.89 0.54 6.43 18.63 0.01 lala
5 2.46 3.97 8.81 0.02 0.33 4.14 0.01 feeeee


.. GENERATED FROM PYTHON SOURCE LINES 450-453 .. code-block:: python3 orientations.map_data_from_surfaces(surfaces, 'id') orientations .. raw:: html
X Y Z G_x G_y G_z smooth surface
0 8.33 8.79 5.68 0.43 4.03 12.22 0.01 foo
1 8.25 6.22 5.13 0.02 0.06 7.72 0.01 foo5
2 3.37 6.46 0.18 0.69 5.60 16.39 0.01 lala
3 3.82 1.27 8.42 0.15 4.21 13.70 0.01 foo5
4 5.79 9.10 0.89 0.54 6.43 18.63 0.01 lala
5 2.46 3.97 8.81 0.02 0.33 4.14 0.01 feeeee


.. GENERATED FROM PYTHON SOURCE LINES 454-457 .. code-block:: python3 orientations.map_data_from_series(series, 'order_series') orientations .. raw:: html
X Y Z G_x G_y G_z smooth surface
0 8.33 8.79 5.68 0.43 4.03 12.22 0.01 foo
1 8.25 6.22 5.13 0.02 0.06 7.72 0.01 foo5
2 3.37 6.46 0.18 0.69 5.60 16.39 0.01 lala
3 3.82 1.27 8.42 0.15 4.21 13.70 0.01 foo5
4 5.79 9.10 0.89 0.54 6.43 18.63 0.01 lala
5 2.46 3.97 8.81 0.02 0.33 4.14 0.01 feeeee


.. GENERATED FROM PYTHON SOURCE LINES 458-460 .. code-block:: python3 orientations.update_annotations() .. raw:: html
X Y Z G_x G_y G_z smooth surface
0 8.33 8.79 5.68 0.43 4.03 12.22 0.01 foo
1 8.25 6.22 5.13 0.02 0.06 7.72 0.01 foo5
2 3.37 6.46 0.18 0.69 5.60 16.39 0.01 lala
3 3.82 1.27 8.42 0.15 4.21 13.70 0.01 foo5
4 5.79 9.10 0.89 0.54 6.43 18.63 0.01 lala
5 2.46 3.97 8.81 0.02 0.33 4.14 0.01 feeeee


.. GENERATED FROM PYTHON SOURCE LINES 461-464 Grid ~~~~ .. GENERATED FROM PYTHON SOURCE LINES 466-469 .. code-block:: python3 grid = gp.Grid() grid.create_regular_grid([0, 10, 0, 10, 0, 10], [50, 50, 50]) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 470-472 .. code-block:: python3 grid.values .. rst-class:: sphx-glr-script-out Out: .. code-block:: none array([[0.1, 0.1, 0.1], [0.1, 0.1, 0.3], [0.1, 0.1, 0.5], ..., [9.9, 9.9, 9.5], [9.9, 9.9, 9.7], [9.9, 9.9, 9.9]]) .. GENERATED FROM PYTHON SOURCE LINES 473-476 Rescaling Data ^^^^^^^^^^^^^^ .. GENERATED FROM PYTHON SOURCE LINES 478-481 .. code-block:: python3 rescaling = gempy.core.data_modules.geometric_data.ScalingSystem( surface_points, orientations, grid) .. GENERATED FROM PYTHON SOURCE LINES 482-484 .. code-block:: python3 surface_points .. raw:: html
X Y Z smooth surface
2 0.53 0.55 0.03 2.00e-06 lala
4 0.95 0.83 0.94 2.00e-06 lala
1 0.69 0.89 0.06 2.00e-06 foo5
3 0.02 0.23 0.55 2.00e-06 foo5
0 0.39 0.41 0.82 2.00e-06 foo
5 0.45 0.66 0.41 2.00e-06 feeeee


.. GENERATED FROM PYTHON SOURCE LINES 485-487 .. code-block:: python3 orientations .. raw:: html
X Y Z G_x G_y G_z smooth surface
0 8.33 8.79 5.68 0.43 4.03 12.22 0.01 foo
1 8.25 6.22 5.13 0.02 0.06 7.72 0.01 foo5
2 3.37 6.46 0.18 0.69 5.60 16.39 0.01 lala
3 3.82 1.27 8.42 0.15 4.21 13.70 0.01 foo5
4 5.79 9.10 0.89 0.54 6.43 18.63 0.01 lala
5 2.46 3.97 8.81 0.02 0.33 4.14 0.01 feeeee


.. GENERATED FROM PYTHON SOURCE LINES 488-491 Additional Data ~~~~~~~~~~~~~~~ .. GENERATED FROM PYTHON SOURCE LINES 493-495 .. code-block:: python3 ad = gp.AdditionalData(surface_points, orientations, grid, faults, surfaces, rescaling) .. GENERATED FROM PYTHON SOURCE LINES 496-498 .. code-block:: python3 ad .. raw:: html
values
Structure isLith True
isFault True
number faults 1
number surfaces 4
number series 5
number surfaces per series [0, 2, 1, 0, 1]
len surfaces surface_points [2, 2, 1, 1]
len series surface_points [0, 4, 1, 0, 1]
len series orientations [0, 4, 1, 0, 1]
Options dtype float64
output geology
theano_optimizer fast_compile
device cpu
verbosity None
Kriging range 17.32
$C_o$ 7.14
drift equations [3, 3, 3, 3, 3]
Rescaling rescaling factor 17.73
centers [4.1742456039270355, 4.664036206917114, 4.423674404271726]


.. GENERATED FROM PYTHON SOURCE LINES 499-501 .. code-block:: python3 ad.structure_data .. raw:: html
values
isLith True
isFault True
number faults 1
number surfaces 4
number series 5
number surfaces per series [0, 2, 1, 0, 1]
len surfaces surface_points [2, 2, 1, 1]
len series surface_points [0, 4, 1, 0, 1]
len series orientations [0, 4, 1, 0, 1]


.. GENERATED FROM PYTHON SOURCE LINES 502-504 .. code-block:: python3 ad.options .. raw:: html
values
dtype float64
output geology
theano_optimizer fast_compile
device cpu
verbosity None


.. GENERATED FROM PYTHON SOURCE LINES 505-507 .. code-block:: python3 ad.options.df .. raw:: html
dtype output theano_optimizer device verbosity
values float64 geology fast_compile cpu None


.. GENERATED FROM PYTHON SOURCE LINES 508-510 .. code-block:: python3 ad.options.df.dtypes .. rst-class:: sphx-glr-script-out Out: .. code-block:: none dtype category output category theano_optimizer category device category verbosity object dtype: object .. GENERATED FROM PYTHON SOURCE LINES 511-513 .. code-block:: python3 ad.kriging_data .. raw:: html
values
range 17.32
$C_o$ 7.14
drift equations [3, 3, 3, 3, 3]


.. GENERATED FROM PYTHON SOURCE LINES 514-516 .. code-block:: python3 ad.rescaling_data .. raw:: html
values
rescaling factor 17.73
centers [4.1742456039270355, 4.664036206917114, 4.423674404271726]


.. GENERATED FROM PYTHON SOURCE LINES 517-520 Interpolator ~~~~~~~~~~~~ .. GENERATED FROM PYTHON SOURCE LINES 522-525 .. code-block:: python3 faults.df['isFault'].values .. rst-class:: sphx-glr-script-out Out: .. code-block:: none array([False, True, False, False, False]) .. GENERATED FROM PYTHON SOURCE LINES 526-528 .. code-block:: python3 interp = gp.InterpolatorModel(surface_points, orientations, grid, surfaces, series, faults, ad) .. GENERATED FROM PYTHON SOURCE LINES 529-531 .. code-block:: python3 interp.compile_th_fn_geo() .. rst-class:: sphx-glr-script-out Out: .. code-block:: none Compiling theano function... Level of Optimization: fast_compile Device: cpu Precision: float64 Number of faults: 1 Compilation Done! .. GENERATED FROM PYTHON SOURCE LINES 532-533 .. code-block:: python3 interp.print_theano_shared() .. rst-class:: sphx-glr-script-out Out: .. code-block:: none len sereies i [0 2] len sereies o [0 4] len sereies w [ 0 17] n surfaces per series [0 2] n universal eq [3] is finite [0 0 0 0 0] is erosion [0] is onlap [0] .. rst-class:: sphx-glr-timing **Total running time of the script:** ( 0 minutes 3.449 seconds) .. _sphx_glr_download_tutorials_ch1_fundamentals_ch1_2a_data_manipulation.py: .. only :: html .. container:: sphx-glr-footer :class: sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: ch1_2a_data_manipulation.py ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: ch1_2a_data_manipulation.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_