Quick Start¶
Install it¶
To install from pypi:
$ pip3 install effectus
To install from head:
$ pip3 install hg+https://bitbucket.org/hyllos/effectus-python#stable
Note
If you install effectus on a system that is not mac OS (Darwin) or Windows, the Excel interface will not be available.
Basic usage¶
Note
You may paste code blocks (those introduced with >>>
) directly into
IPython. However, re-typing them manually increases learning achievement
manifold.
Let’s look whether there are two centres of gravity with the fares of some of the passengers of the titanic.
>>> from effectus import Effects
>>> from effectus.data import titanic_fares
>>> fares = Effects(titanic_fares())
How much passengers make up for 60 percent of total fares?
>>> fares.attain_effects(0.6)
0.177
Which fares are those?
>>> required_fares = fares.retrieve_effects(0.6)
We can simplify that by selecting values greater or equal than a threshold:
>>> fares.separate_effects(0.6)
(61.8625, 2, 2)
But what if multiple effects have the same value?
>>> fares.separate_effects(0.8)
(24.0, 1, 2)
In this case you select all values greater than 24 but include only the first of two occurrences.
How many ascending fares are required to make up for 5 percent of total fares?
>>> fares.attain_effects(0.05, ascending=True)
0.232
How many for interval from 60 to 80 percent of total fares?
>>> fares.interval_effects(0.6, 0.8)
0.208
To attain a specified level of causes (above you attained level of effects), change the suffix _effects
to _causes
:
>>> fares.attain_causes(0.2)
0.634
Multiple Attributes¶
Usually, your effects are attributes of objects.
>>> from effectus.data import exoplanets
>>> the_exoplanets = dict(exoplanets()) # the example data are functions returning a list, so don't forget the parentheses!
>>> the_exoplanets['CoRoT-1 b']
OrderedDict([('mass', 1.03), ('radius', 1.49)])
The exoplanet CoRoT-1 b has the mass of 1.03 Jupiters and a radius of 1.49 Jupiters.
You can grab all the masses and use the Effects
class as outlined above, like:
>>> masses = [exoplanet['mass'] for exoplanet in the_exoplanets.values()]
>>> Effects(masses)
<pareto present [0.84]: 1/5 causes => 4/5 effects [total ∆: 1.5 % points]>
Intersection and Exclusion¶
The most interesting insights become visible by intersection or exclusion of intervals of different attributes.
But first, let’s get the volume for each exoplanet:
>>> from math import pi
>>> for exoplanet, values in the_exoplanets.items():
... the_exoplanets[exoplanet]['volume'] = 4/3*pi*values['radius']**3
Which exoplanets make up 80 percent of mass, which 80 percent of volume?
>>> from effectus.intervals import keys_in_effects_interval
>>> # we will put the names of the exoplanets (keys of the dict)
>>> # in a set to compare both groups with each other
>>> majority_of_mass = set(keys_in_effects_interval(the_exoplanets, 'mass', 0, 0.8))
>>> majority_of_volume = set(keys_in_effects_interval(the_exoplanets, 'volume', 0, 0.8))
Which belong to both groups?
>>> in_both_groups = majority_of_mass.intersection(majority_of_volume)
>>> only_majority_of_mass = majority_of_mass.difference(majority_of_volume)
>>> only_majority_of_volume = majority_of_volume.difference(majority_of_mass)
>>> total_count = len(the_exoplanets)
>>> print('{:.0f} percent of exoplanets make up 80 percent of mass.'.format(len(majority_of_mass)/total_count*100))
>>> print('{:.0f} percent of exoplanets make up 80 percent of volume.'.format(len(majority_of_volume)/total_count*100))
>>> print('{:.0f} percent of exoplanets belong to both groups.'.format(len(in_both_groups)/total_count*100))
>>> print('{:.0f} percent of those constituting 80 percent of total mass constitute 80 percent of total volume, too.'.format(len(only_majority_of_mass)/len(majority_of_mass)*100))
20 percent of exoplanets make up 80 percent of total mass.
36 percent of exoplanets make up 80 percent of total volume.
9 percent of exoplanets belong to both groups.
56 percent of those constituting 80 percent of total mass constitute 80 percent of total volume, too.
Quick Reference¶
- Which causes make up specified effects?
effectus.Effects.attain_effects()
- Which effects are this?
effectus.Effects.retrieve_effects()
- Which threshold value the selected values must be greater than or equal to?
effectus.Effects.separate_effects()
- Which share of causes lie in between the specified effect interval?
effectus.Effects.interval_effects()
- Which objects fall into an effects interval formed by a specific attribute?
effectus.intervals.keys_in_effects_interval()
- What if I want to specify causes instead of effects and determine required effects?
effectus.Effects.attain_causes()
effectus.Effects.retrieve_causes()