{ "cells": [ { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "# Plota graficos da biblioteca Matplotlib abaixo de cada celula\n", "%matplotlib inline\n", "\n", "# Importa as bibliotecas Pandas (importaçao e tratamento de dados tabelados), Numpy (calculos matriciais de dados) e Matplotlib (plotagem)\n", "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TempoMensagemModoTamanho do arquivoAngulo de incidenciaVelocidade do carroRaw Pitot Data - Pitot 0Pressao Dinamica Ref.- Pitot 0VCAS Ref. - Pitot 0Raw Pitot Data - Pitot 1...Forca - Celula Frontal EsquerdaRaw Cell Data - Celula Traseira DireitaForca - Celula Traseira DireitaRaw Cell Data - Celula Traseira EsquerdaForca - Celula Traseira EsquerdaLiftDragMomentDistance CpUnnamed: 35
Tempo zerado
0.000084178.579304.00.0000.00.00.00.00.00.0...0.00.00.00.00.00.0-0.0180.00.0NaN
0.007684178.5869No command4.00.0010.00.00.00.00.00.0...0.00.00.00.00.00.0-0.0180.00.0NaN
0.014584178.5938No command4.00.0010.00.00.00.00.00.0...0.00.00.00.00.00.0-0.0180.00.0NaN
0.021284178.6005No command4.00.0010.00.00.00.00.00.0...0.00.00.00.00.00.0-0.0180.00.0NaN
0.028284178.6075No command4.00.0010.00.00.00.00.00.0...0.00.00.00.00.00.0-0.0180.00.0NaN
\n", "

5 rows × 36 columns

\n", "
" ] }, "execution_count": 4, "metadata": { }, "output_type": "execute_result" } ], "source": [ "# Importa arquivo \"Teste [...] .txt\" como \"df_raw\" (DataFrame)\n", "# Na importaçao ponto (.) é usado como separador (em vez da virgula) e os dados sao separados entre si por tab (\\t). \n", "# A segunda, que contem as unidades, é pulada na importaçao.\n", "df_raw = pd.read_csv('Teste 1 - Asa Regular Oficial 2018 a 0 graus.txt', sep='.', delimiter='\\t', na_values=['NaN', 'OutOfRange'], skiprows=(1,1))\n", "\n", "# **Para trocar os dados a serem analisados basta trocar o nome do arquivo na linha anterior**\n", "\n", "# Repassa os dados de df_raw para df, para tratarmos. Assim o dataframe original é mantido intacto.\n", "df = df_raw\n", "\n", "# Cria uma nova coluna chamada \"Tempo zerado\" que basicamente pega a coluna de tempo e deduz do primeiro valor de Tempo (6470.9169).\n", "df['Tempo zerado'] = df['Tempo'] - df['Tempo'][0]\n", "\n", "# Seta a coluna \"Tempo zerado\" como index de dados, isto é, por onde eles serao referenciados.\n", "df = df.set_index('Tempo zerado')\n", "\n", "# Imprime o dataframe.\n", "df.head()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "a99df3f1718a8c254545ab9758e12cb69cec7a52" }, "output_type": "execute_result" } ], "source": [ "# Passa os dados da coluna \"Lift\" para um novo DataFrame chamado \"lift\", de modo a facilitarmos o tratamento desta coluna.\n", "lift = df[['Lift']]\n", "\n", "# Plota a coluna \"lift\"\n", "lift.plot(figsize=(28,8)).grid()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "# Claramente existem outliers, provavelmente frutos de ruido, que impossibilitam a leitura correta do grafico. Vamos resolver isso: " ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "8d1f7521519bcbcdae1058b8cf447e8075c17d6d" }, "output_type": "execute_result" } ], "source": [ "# Cropa os dados de lift, removendo todos os dados com valores acima de 250 ou abaixo de -10. Esses pontos sao outliers (pontos fora da curva) provavelmente causados por leituras incorretas.\n", "# Apos a cropagem os dados que foram cropados viram \"NaN\", e por isso o método \"fillna()\" é usado, de tras pra frente (bfill) e de frente pra tras (ffill).\n", "\n", "# Aplica uma mediana mòvel aos dados, de modo que valores de picos sejam removidos. Esse filtro procura eliminar os outliers derivados de ruido, mas preservando os dados originais quase que em sua totalidade\n", "lift_median = lift.rolling(window=int(15), center=True).median().fillna(method='ffill').fillna(method='bfill')\n", "\n", "# Plota o grafico\n", "lift_median.plot(figsize=(28,8)).grid()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "# Agora sim" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "# Modifica o dataframe original com os dados tratados de Lift\n", "df[['Lift']] = lift_median" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "# Realiza nas outras cargas (e velocidade) os mesmos procedimentos que foram aplicados ao Lift\n", "\n", "drag = df[['Drag']]\n", "drag_median = drag.rolling(window=int(15), center=True).median().fillna(method='ffill').fillna(method='bfill')\n", "df[['Drag']] = drag_median\n", "\n", "moment = df[['Moment']]\n", "moment_median = moment.rolling(window=int(15), center=True).median().fillna(method='ffill').fillna(method='bfill')\n", "df[['Moment']] = moment_median\n", "\n", "velocity = df[['Velocidade do carro']]\n", "velocity_median = velocity.rolling(window=int(15), center=True).median().fillna(method='ffill').fillna(method='bfill')\n", "df[['Velocidade do carro']] = velocity_median\n", "\n", "ClCd = df[['Lift']].div(df[['Drag']])" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "aed0ddbcc832211dac7fbee1210b01792bfb51a1" }, "output_type": "execute_result" } ], "source": [ "# Plota todos os graficos juntos\n", "\n", "df['Lift'].plot(figsize=(26, 8)).grid()\n", "df['Drag'].plot(figsize=(26, 8)).grid()\n", "df['Moment'].plot(figsize=(26, 8)).grid()\n", "df['Velocidade do carro'].plot(figsize=(26, 8)).grid()" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "3df1e320b19203d6a2b699308343528d85989e1b" }, "output_type": "execute_result" } ], "source": [ "# Plota todos os graficos juntos\n", "\n", "x_limits = (883,885)\n", "y_limits = (0,200)\n", "\n", "df['Lift'].plot(figsize=(26, 8), xlim=x_limits, ylim=y_limits).grid()\n", "df['Drag'].plot(figsize=(26, 8), xlim=x_limits, ylim=y_limits).grid()\n", "df['Moment'].plot(figsize=(26, 8), xlim=x_limits, ylim=y_limits).grid()\n", "df['Velocidade do carro'].plot(figsize=(26, 8), xlim=x_limits, ylim=y_limits).grid()" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "6f304f6b0552f71ca3f290ea55c764715a5c60ec" }, "output_type": "execute_result" } ], "source": [ "# Plota todos os graficos juntos\n", "\n", "ClCd.head()\n", "ClCd.plot(figsize=(26, 8)).grid()" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ ] } ], "metadata": { "kernelspec": { "display_name": "SageMath (stable)", "language": "sagemath", "metadata": { "cocalc": { "description": "Open-source mathematical software system", "priority": 10, "url": "https://www.sagemath.org/" } }, "name": "sagemath" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.15" } }, "nbformat": 4, "nbformat_minor": 0 }