Skip to content

Latest commit

 

History

History
159 lines (130 loc) · 4.89 KB

peak-integration.md

File metadata and controls

159 lines (130 loc) · 4.89 KB
jupyter
jupytextkernelspecplotly
notebook_metadata_filtertext_representation
all
extensionformat_nameformat_versionjupytext_version
.md
markdown
1.1
1.1.1
display_namelanguagename
Python 2
python
python2
descriptiondisplay_ashas_thumbnaillanguagelayoutnameorderpage_typepermalinkthumbnail
Learn how to integrate the area between peaks and baseline in Python.
peak-analysis
false
python
base
Peak Integration
4
example_index
python/peak-integration/
/images/static-image

New to Plotly?

Plotly's Python library is free and open source! Get started by downloading the client and reading the primer.
You can set up Plotly to work in online or offline mode, or in jupyter notebooks.
We also have a quick-reference cheatsheet (new!) to help you get started!

Imports

The tutorial below imports NumPy, Pandas, SciPy and PeakUtils.

importplotly.plotlyaspyimportplotly.graph_objsasgoimportplotly.figure_factoryasffimportnumpyasnpimportpandasaspdimportscipyimportpeakutils

Tips

Our method for finding the area under any peak is to find the area from the data values to the x-axis, the area from the baseline to the x-axis, and then take the difference between them. In particular, we want to find the areas of these functions defined on the x-axis interval $I$ under the peak.

Let $T(x)$ be the function of the data, $B(x)$ the function of the baseline, and $Area$ the peak integration area between the baseline and the first peak. Since $T(x) \geq B(x)$ for all $x$, then we know that

$$ \begin{align} A = \int_{I} T(x)dx - \int_{I} B(x)dx \end{align} $$

Import Data

For our example below we will import some data on milk production by month:

milk_data=pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/monthly-milk-production-pounds.csv') time_series=milk_data['Monthly milk production (pounds per cow)'] time_series=np.asarray(time_series) df=milk_data[0:15] table=ff.create_table(df) py.iplot(table, filename='milk-production-dataframe')

Area Under One Peak

baseline_values=peakutils.baseline(time_series) x= [jforjinrange(len(time_series))] time_series=time_series.tolist() baseline_values=baseline_values.tolist() rev_baseline_values=baseline_values[:11] rev_baseline_values.reverse() area_x= [0,1,2,3,4,5,6,7,8,9,10,11,10,9,8,7,6,5,4,3,2,1] area_y=time_series[:11] +rev_baseline_valuestrace=go.Scatter( x=x, y=time_series, mode='lines', marker=dict( color='#B292EA', ), name='Original Plot' ) trace2=go.Scatter( x=x, y=baseline_values, mode='markers', marker=dict( size=3, color='#EB55BF', ), name='Bassline' ) trace3=go.Scatter( x=area_x, y=area_y, mode='lines+markers', marker=dict( size=4, color='rgb(255,0,0)', ), name='1st Peak Outline' ) first_peak_x= [jforjinrange(11)] area_under_first_peak=np.trapz(time_series[:11], first_peak_x) -np.trapz(baseline_values[:11], first_peak_x) area_under_first_peakannotation=go.Annotation( x=80, y=1000, text='The peak integration for the first peak is approximately %s'% (area_under_first_peak), showarrow=False ) layout=go.Layout( annotations=[annotation] ) trace_data= [trace, trace2, trace3] fig=go.Figure(data=trace_data, layout=layout) py.iplot(fig, filename='milk-production-peak-integration')
fromIPython.displayimportdisplay, HTMLdisplay(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />')) display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">')) ! pipinstallgit+https://github.com/plotly/publisher.git--upgradeimportpublisherpublisher.publish( 'python-Peak-Integration.ipynb', 'python/peak-integration/', 'Peak Integration | plotly', 'Learn how to integrate the area between peaks and bassline in Python.', title='Peak Integration in Python | plotly', name='Peak Integration', language='python', page_type='example_index', has_thumbnail='false', display_as='peak-analysis', order=4, ipynb='~notebook_demo/121')
close