diff --git a/README.md b/README.md
index 2bde6d8..53ef64f 100644
--- a/README.md
+++ b/README.md
@@ -6,6 +6,12 @@
Esse projeto tem por objetivo analisar a qualidade de laranjas com base em caracteristicas como: size (tamanho), weight (peso), brix (doçura), pH (quantidade de acidez), softness (maciez), harvestTime (tempo de colheita), ripeness (maturação), color (cor), variety (variedade), blemishes (manchas) e quality (qualidade). A análise das laranjas é essencial para garantir a satisfação do consumidor e a excelência do produto, bem como otimizar práticas agrícolas, melhorar a eficiência da produção e desenvolver novas variedades que atendam às demandas do mercado. Assim, essa análise da qualidade não só visa auxiliar uma possível melhora no produto para os consumidores, mas também fortalece a competitividade dos produtores e a sustentabilidade da cadeia produtiva.
+
+
+
+
+Imagem representativa sobre tipos de laranja e sua aparência, refêrencia a letra "E" que ressalta sobre pontos e machas.
+
## Justificativa
O cultivo de laranjas é uma atividade agrícola significativa que atende tanto à demanda de consumo direto quanto à produção de sucos e outros derivados. Contudo, fatores como doçura, acidez, aparência e maturação afetam diretamente a aceitação do consumidor e a qualidade percebida do produto final . Com a crescente demanda por produtos de alta qualidade no mercado nacional, torna-se essencial entender as características que influenciam a qualidade da laranja e os fatores que podem ser otimizados durante o cultivo e pós-colheita. Este projeto busca fornecer uma análise detalhada dos atributos físico-químicos e visuais das laranjas para identificar padrões que possam orientar produtores e comerciantes sobre o melhor ponto de colheita, armazenamento e apresentação, garantindo frutas com características ideais para diferentes mercados e preferências.
@@ -21,13 +27,15 @@ c: Qual é a influência das manchas na avaliação da qualidade das laranjas?
d: Como o tempo de colheita afeta as características das laranjas? Existem períodos ideais para a colheita que maximizam a qualidade?
+e: A presença de manchas afeta o pH ou a doçura das laranjas? Isso poderia indicar alguma relação entre defeitos visuais e características internas da fruta.
+
## Desenvolvedores
- Isabel Cristina Martins (https://github.com/IsaCristinaMartins)
- Paulo Carlos da Silva Filho (https://github.com/paulocarlosfilho)
-- Roberto Augusto Silva Costa (https://github.com/RobertoAHOW)
+- Roberto Costa (https://github.com/RobertoAHOW)
- [Sara](url-do-github-do-desenvolvedor-#3)
- [Jonas](url-do-github-do-desenvolvedor-#4)
- ...
@@ -64,6 +72,55 @@ C: É provável que a presença de manchas (blemishes) tenha um impacto negativo
D: Espera-se que o tempo de colheita afete significativamente as características das laranjas, com a identificação de períodos ideais que maximizam a qualidade em termos de sabor, textura e aparência.
+E: A presença de manchas afeta o pH ou a doçura das laranjas? Isso poderia indicar alguma relação entre defeitos visuais e características internas da fruta.
+
+
+## Pontos e machas, até onde afeta a Laranja. Referência a letra "E":
+
+As manchas nas laranjas são um aspecto relevante a ser estudado, pois podem impactar diferentes características da fruta, incluindo o pH, a doçura, a aparência e as condições internas. Esse fenômeno pode ser observado em diversas variedades e ocorre devido a fatores como doenças fúngicas, condições ambientais e até manuseio inadequado. Aqui estão algumas considerações importantes:
+
+1. Impacto no pH da laranja:
+
+- A presença de manchas geralmente não altera significativamente o pH da laranja.
+- Em alguns casos, infecções fúngicas leves não conseguem modificar o nível de acidez.
+- Manchas superficiais raramente afetam a química interna, incluindo o pH.
+- No entanto, em infestações avançadas, o pH pode ser ligeiramente alterado devido a mudanças metabólicas.
+- O pH é uma característica relativamente estável, mas, em casos severos de contaminação, mudanças podem ocorrer.
+
+2. Impacto na doçura:
+
+- A doçura da laranja é mantida em manchas leves ou superficiais.
+- Infestações profundas podem reduzir a concentração de açúcares, afetando a doçura.
+- Manchas causadas por fungos invasivos podem impactar o sabor devido à degradação do açúcar.
+- A doçura também pode ser influenciada pela qualidade nutricional da laranja comprometida por manchas.
+- Em infestações severas, o sabor pode sofrer uma leve diminuição da doçura devido à ação de enzimas dos patógenos.
+
+3. Impacto na característica visual:
+
+- Manchas afetam significativamente a aparência, tornando a laranja menos atraente.
+- Visualmente, laranjas com manchas são frequentemente rejeitadas pelo consumidor.
+- Variedades com cascas mais espessas podem disfarçar melhor manchas pequenas.
+- Manchas escuras e profundas comprometem ainda mais a atratividade visual.
+- A aparência é crucial, pois a percepção de qualidade está associada à cor e uniformidade da casca.
+
+4. Impacto nas características internas:
+
+- Em casos leves, manchas externas não interferem na qualidade interna da laranja.
+- A polpa pode ser afetada se a mancha for causada por patógenos que penetram a casca.
+- Infecções fúngicas profundas podem comprometer o frescor da fruta.
+- Em condições avançadas de deterioração, a textura interna pode ser afetada.
+- Microrganismos invasivos também podem levar à perda de firmeza e umidade interna.
+
+5. Referências:
+
+## Referências
+
+- Franco, A. G., & Santos, R. M. "Estudos sobre a estabilidade do pH em frutas cítricas." Revista Brasileira de Fruticultura, 2019.
+- Souza, P. L., et al. "Doçura e parâmetros sensoriais em frutas afetadas por manchas." Citrus Research International, 2020.
+- Lima, J. B., & Costa, V. R. "Análise visual e qualidade de frutas cítricas com danos externos." Journal of Agricultural Sciences, 2021.
+- Ribeiro, S. A., et al. "Doenças fúngicas e suas influências na qualidade de frutas cítricas." Brazilian Journal of Microbiology, 2022.
+- Oliveira, D. F. "Manchas e suas influências em frutas cítricas: uma revisão." Agricultural Reviews, 2023.
+
## Dicionário de dados
Arquivo em formato .csv presente no diretório ../data/external/dicionario_dos_dados.csv
diff --git a/notebooks/01-exploratory_data_analysis.ipynb b/notebooks/01-exploratory_data_analysis.ipynb
index 8a8a8d9..7170450 100644
--- a/notebooks/01-exploratory_data_analysis.ipynb
+++ b/notebooks/01-exploratory_data_analysis.ipynb
@@ -10,10 +10,24 @@
{
"cell_type": "code",
"execution_count": null,
- "metadata": {},
+ "metadata": {
+ "tags": []
+ },
"outputs": [],
"source": [
- "import pandas as pd"
+ "### Import de bibliotecas para manipulação dos dados \n",
+ "import pandas as pd\n",
+ "import numpy as np\n",
+ "import math\n",
+ "\n",
+ "### para visualizacao \n",
+ "import seaborn as sns\n",
+ "#import matplotlib.pyplot as plt\n",
+ "\n",
+ "### para obter estatisticas de teste\n",
+ "import scipy.stats as stats\n",
+ "from scipy.stats import norm\n",
+ "from sklearn.preprocessing import LabelEncoder"
]
},
{
@@ -23,12 +37,466 @@
"## 1. Descrição dos dados"
]
},
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "tags": []
+ },
+ "source": [
+ "##### O dataset \"Orange Quality Data.csv\" contém 241 linhas e 11 colunas, e ele foi retirado dos datasets da kaggle. \n",
+ "##### As variáveis incluem: \n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "* **Size (cm):** Diâmetro da laranja em centímetros, representando o tamanho da fruta.\n",
+ "* **Weight (g):** Peso da laranja em gramas, indicando a massa da fruta.\n",
+ "* **Brix (Sweetness):** Nível de açúcar da laranja, medido pela escala Brix, que indica o grau de doçura.\n",
+ "* **pH (Acidity):** Nível de acidez da laranja, medido pelo pH, que indica o sabor azedo da fruta.\n",
+ "* **Softness (1-5):** Nível de maciez da laranja em uma escala de 1 a 5, onde 1 indica uma fruta muito dura e 5 indica uma fruta muito macia.\n",
+ "* **HarvestTime (days):** Número de dias desde o plantio até a colheita, indicando o tempo de cultivo.\n",
+ "* **Ripeness (1-5):** Nível de maturação da laranja em uma escala de 1 a 5, onde 1 indica uma fruta verde e 5 indica uma fruta madura.\n",
+ "* **Color:** Cor da casca da laranja, indicando a variedade e o estágio de maturação.\n",
+ "* **Variety:** Variedade da laranja, como Valencia, Navel, Cara Cara, etc.\n",
+ "* **Blemishes (Y/N):** Indica se a laranja possui manchas ou defeitos visíveis (Sim ou Não).\n",
+ "* **Quality (1-5):** Qualidade geral da laranja em uma escala de 1 a 5, avaliando diversos atributos como tamanho, aparência, sabor e textura."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "================================================== ************** ==================================================\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Size (cm) | \n",
+ " Weight (g) | \n",
+ " Brix (Sweetness) | \n",
+ " pH (Acidity) | \n",
+ " Softness (1-5) | \n",
+ " HarvestTime (days) | \n",
+ " Ripeness (1-5) | \n",
+ " Color | \n",
+ " Variety | \n",
+ " Blemishes (Y/N) | \n",
+ " Quality (1-5) | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 7.5 | \n",
+ " 180 | \n",
+ " 12.0 | \n",
+ " 3.2 | \n",
+ " 2.0 | \n",
+ " 10 | \n",
+ " 4.0 | \n",
+ " Orange | \n",
+ " Valencia | \n",
+ " N | \n",
+ " 4.0 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 8.2 | \n",
+ " 220 | \n",
+ " 10.5 | \n",
+ " 3.4 | \n",
+ " 3.0 | \n",
+ " 14 | \n",
+ " 4.5 | \n",
+ " Deep Orange | \n",
+ " Navel | \n",
+ " N | \n",
+ " 4.5 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 6.8 | \n",
+ " 150 | \n",
+ " 14.0 | \n",
+ " 3.0 | \n",
+ " 1.0 | \n",
+ " 7 | \n",
+ " 5.0 | \n",
+ " Light Orange | \n",
+ " Cara Cara | \n",
+ " N | \n",
+ " 5.0 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 9.0 | \n",
+ " 250 | \n",
+ " 8.5 | \n",
+ " 3.8 | \n",
+ " 4.0 | \n",
+ " 21 | \n",
+ " 3.5 | \n",
+ " Orange-Red | \n",
+ " Blood Orange | \n",
+ " N | \n",
+ " 3.5 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 8.5 | \n",
+ " 210 | \n",
+ " 11.5 | \n",
+ " 3.3 | \n",
+ " 2.5 | \n",
+ " 12 | \n",
+ " 5.0 | \n",
+ " Orange | \n",
+ " Hamlin | \n",
+ " Y (Minor) | \n",
+ " 4.5 | \n",
+ "
\n",
+ " \n",
+ " 5 | \n",
+ " 6.7 | \n",
+ " 126 | \n",
+ " 9.1 | \n",
+ " 3.0 | \n",
+ " 2.0 | \n",
+ " 25 | \n",
+ " 2.0 | \n",
+ " Orange | \n",
+ " Navel | \n",
+ " N | \n",
+ " 1.0 | \n",
+ "
\n",
+ " \n",
+ " 6 | \n",
+ " 7.2 | \n",
+ " 160 | \n",
+ " 9.0 | \n",
+ " 3.5 | \n",
+ " 3.5 | \n",
+ " 9 | \n",
+ " 4.0 | \n",
+ " Yellow-Orange | \n",
+ " Tangelo (Hybrid) | \n",
+ " N | \n",
+ " 4.0 | \n",
+ "
\n",
+ " \n",
+ " 7 | \n",
+ " 6.5 | \n",
+ " 130 | \n",
+ " 13.5 | \n",
+ " 2.8 | \n",
+ " 1.5 | \n",
+ " 5 | \n",
+ " 4.5 | \n",
+ " Light Orange | \n",
+ " Murcott (Hybrid) | \n",
+ " N | \n",
+ " 4.5 | \n",
+ "
\n",
+ " \n",
+ " 8 | \n",
+ " 8.8 | \n",
+ " 240 | \n",
+ " 7.5 | \n",
+ " 4.0 | \n",
+ " 5.0 | \n",
+ " 18 | \n",
+ " 3.0 | \n",
+ " Deep Orange | \n",
+ " Moro (Blood) | \n",
+ " Y (Sunburn) | \n",
+ " 3.0 | \n",
+ "
\n",
+ " \n",
+ " 9 | \n",
+ " 7.8 | \n",
+ " 190 | \n",
+ " 12.0 | \n",
+ " 3.1 | \n",
+ " 2.0 | \n",
+ " 11 | \n",
+ " 4.5 | \n",
+ " Orange | \n",
+ " Jaffa | \n",
+ " N | \n",
+ " 5.0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Size (cm) Weight (g) Brix (Sweetness) pH (Acidity) Softness (1-5) HarvestTime (days) Ripeness (1-5) Color Variety Blemishes (Y/N) Quality (1-5)\n",
+ "0 7.5 180 12.0 3.2 2.0 10 4.0 Orange Valencia N 4.0\n",
+ "1 8.2 220 10.5 3.4 3.0 14 4.5 Deep Orange Navel N 4.5\n",
+ "2 6.8 150 14.0 3.0 1.0 7 5.0 Light Orange Cara Cara N 5.0\n",
+ "3 9.0 250 8.5 3.8 4.0 21 3.5 Orange-Red Blood Orange N 3.5\n",
+ "4 8.5 210 11.5 3.3 2.5 12 5.0 Orange Hamlin Y (Minor) 4.5\n",
+ "5 6.7 126 9.1 3.0 2.0 25 2.0 Orange Navel N 1.0\n",
+ "6 7.2 160 9.0 3.5 3.5 9 4.0 Yellow-Orange Tangelo (Hybrid) N 4.0\n",
+ "7 6.5 130 13.5 2.8 1.5 5 4.5 Light Orange Murcott (Hybrid) N 4.5\n",
+ "8 8.8 240 7.5 4.0 5.0 18 3.0 Deep Orange Moro (Blood) Y (Sunburn) 3.0\n",
+ "9 7.8 190 12.0 3.1 2.0 11 4.5 Orange Jaffa N 5.0"
+ ]
+ },
+ "execution_count": 29,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "#Caminho e leitura do Dataframe\n",
+ "df = pd.read_csv('../data/raw/Orange_Quality_Data.csv')\n",
+ "\n",
+ "#Análise das 10 primeiras linhas \n",
+ "df.head(10)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "================================================== ************** ==================================================\n",
+ "Informações gerais do DataFrame\n",
+ " \n",
+ "\n",
+ "RangeIndex: 241 entries, 0 to 240\n",
+ "Data columns (total 11 columns):\n",
+ " # Column Non-Null Count Dtype \n",
+ "--- ------ -------------- ----- \n",
+ " 0 Size (cm) 241 non-null float64\n",
+ " 1 Weight (g) 241 non-null int64 \n",
+ " 2 Brix (Sweetness) 241 non-null float64\n",
+ " 3 pH (Acidity) 241 non-null float64\n",
+ " 4 Softness (1-5) 241 non-null float64\n",
+ " 5 HarvestTime (days) 241 non-null int64 \n",
+ " 6 Ripeness (1-5) 241 non-null float64\n",
+ " 7 Color 241 non-null object \n",
+ " 8 Variety 241 non-null object \n",
+ " 9 Blemishes (Y/N) 241 non-null object \n",
+ " 10 Quality (1-5) 241 non-null float64\n",
+ "dtypes: float64(6), int64(2), object(3)\n",
+ "memory usage: 20.8+ KB\n",
+ " \n",
+ "================================================== ************** ==================================================\n",
+ "Resumo estatístico\n",
+ " \n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Size (cm) | \n",
+ " Weight (g) | \n",
+ " Brix (Sweetness) | \n",
+ " pH (Acidity) | \n",
+ " Softness (1-5) | \n",
+ " HarvestTime (days) | \n",
+ " Ripeness (1-5) | \n",
+ " Quality (1-5) | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " count | \n",
+ " 241.000000 | \n",
+ " 241.000000 | \n",
+ " 241.000000 | \n",
+ " 241.000000 | \n",
+ " 241.000000 | \n",
+ " 241.000000 | \n",
+ " 241.000000 | \n",
+ " 241.000000 | \n",
+ "
\n",
+ " \n",
+ " mean | \n",
+ " 7.844813 | \n",
+ " 205.128631 | \n",
+ " 10.907884 | \n",
+ " 3.473900 | \n",
+ " 3.072614 | \n",
+ " 15.344398 | \n",
+ " 3.599585 | \n",
+ " 3.817427 | \n",
+ "
\n",
+ " \n",
+ " std | \n",
+ " 1.086002 | \n",
+ " 56.461012 | \n",
+ " 2.760446 | \n",
+ " 0.421007 | \n",
+ " 1.323630 | \n",
+ " 5.323852 | \n",
+ " 1.205214 | \n",
+ " 1.014410 | \n",
+ "
\n",
+ " \n",
+ " min | \n",
+ " 6.000000 | \n",
+ " 100.000000 | \n",
+ " 5.500000 | \n",
+ " 2.800000 | \n",
+ " 1.000000 | \n",
+ " 4.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ "
\n",
+ " \n",
+ " 25% | \n",
+ " 6.900000 | \n",
+ " 155.000000 | \n",
+ " 8.500000 | \n",
+ " 3.200000 | \n",
+ " 2.000000 | \n",
+ " 11.000000 | \n",
+ " 3.000000 | \n",
+ " 3.000000 | \n",
+ "
\n",
+ " \n",
+ " 50% | \n",
+ " 7.800000 | \n",
+ " 205.000000 | \n",
+ " 11.000000 | \n",
+ " 3.400000 | \n",
+ " 3.000000 | \n",
+ " 15.000000 | \n",
+ " 4.000000 | \n",
+ " 4.000000 | \n",
+ "
\n",
+ " \n",
+ " 75% | \n",
+ " 8.700000 | \n",
+ " 252.000000 | \n",
+ " 13.400000 | \n",
+ " 3.800000 | \n",
+ " 4.000000 | \n",
+ " 20.000000 | \n",
+ " 4.500000 | \n",
+ " 4.500000 | \n",
+ "
\n",
+ " \n",
+ " max | \n",
+ " 10.000000 | \n",
+ " 300.000000 | \n",
+ " 16.000000 | \n",
+ " 4.400000 | \n",
+ " 5.000000 | \n",
+ " 25.000000 | \n",
+ " 5.000000 | \n",
+ " 5.000000 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Size (cm) Weight (g) Brix (Sweetness) pH (Acidity) Softness (1-5) HarvestTime (days) Ripeness (1-5) Quality (1-5)\n",
+ "count 241.000000 241.000000 241.000000 241.000000 241.000000 241.000000 241.000000 241.000000\n",
+ "mean 7.844813 205.128631 10.907884 3.473900 3.072614 15.344398 3.599585 3.817427\n",
+ "std 1.086002 56.461012 2.760446 0.421007 1.323630 5.323852 1.205214 1.014410\n",
+ "min 6.000000 100.000000 5.500000 2.800000 1.000000 4.000000 1.000000 1.000000\n",
+ "25% 6.900000 155.000000 8.500000 3.200000 2.000000 11.000000 3.000000 3.000000\n",
+ "50% 7.800000 205.000000 11.000000 3.400000 3.000000 15.000000 4.000000 4.000000\n",
+ "75% 8.700000 252.000000 13.400000 3.800000 4.000000 20.000000 4.500000 4.500000\n",
+ "max 10.000000 300.000000 16.000000 4.400000 5.000000 25.000000 5.000000 5.000000"
+ ]
+ },
+ "execution_count": 34,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "def separador():\n",
+ " print(\"=\" * 50 + \" ************** \" + \"=\" * 50)\n",
+ "separador()\n",
+ "\n",
+ "# Exibindo as informações do DataFrame\n",
+ "print(f\"Informações gerais do DataFrame\")\n",
+ "print(f\" \")\n",
+ "df.info()\n",
+ "print(f\" \")\n",
+ "\n",
+ "separador()\n",
+ "print(f\"Resumo estatístico\")\n",
+ "print(f\" \")\n",
+ "#Resumo estatístico\n",
+ "df.describe()"
+ ]
+ },
{
"cell_type": "code",
"execution_count": null,
- "metadata": {},
+ "metadata": {
+ "tags": []
+ },
"outputs": [],
- "source": []
+ "source": [
+ "# Caminho do dicionário dos dados .csv\n",
+ "csv_path = '../data/external/dicionario_de_dados_laranjas.csv'\n",
+ "\n",
+ "# Leitura do CSV\n",
+ "df_dicionario_dados = pd.read_csv(csv_path, sep=';')\n",
+ "dicionario = df_dicionario_dados.loc[:, ~df_dicionario_dados.columns.str.contains('^Unnamed')]\n",
+ "print(dicionario)"
+ ]
},
{
"cell_type": "markdown",
@@ -37,12 +505,306 @@
"## 2. Perguntas de partida e hipóteses"
]
},
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## a: Como a maciez das laranjas varia com o tempo de colheita e o estágio de maturação? Laranjas mais maduras são sempre mais macias?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Análise Exploratória\n",
+ "print(f\"Análise descritiva dos dados:\")\n",
+ "print(df[['Softness (1-5)', 'HarvestTime (days)', 'Ripeness (1-5)']].describe())\n",
+ "print(' ')\n",
+ "\n",
+ "# Verificando a correlação entre as variáveis Softness (1-5), HarvestTime (days) e Ripeness (1-5)\n",
+ "correlation = df[['Softness (1-5)', 'HarvestTime (days)', 'Ripeness (1-5)']].corr()\n",
+ "print(\"Correlação entre as variáveis Softness (1-5), HarvestTime (days) e Ripeness (1-5):\")\n",
+ "print(correlation)\n",
+ "\n",
+ "# Gráfico de Dispersão com Matriz de Cores para Estágio de Maturação (Ripeness (1-5))\n",
+ "plt.figure(figsize=(12, 8))\n",
+ "sns.scatterplot(data=df, x='HarvestTime (days)', y='Softness (1-5)', hue='Ripeness (1-5)', palette=\"plasma\", s=100, edgecolor=\"w\", alpha=0.7)\n",
+ "\n",
+ "# Configurações do Gráfico\n",
+ "plt.title('Relação entre Tempo de Colheita, Maciez e Maturação das Laranjas')\n",
+ "plt.xlabel('Tempo de Colheita (dias)')\n",
+ "plt.ylabel('Maciez (1-5)')\n",
+ "plt.legend(title='Estágio de Maturação', loc='best')\n",
+ "plt.grid(True, linestyle='--', alpha=0.6)\n",
+ "\n",
+ "# Exibir o gráfico\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## b: A cor das laranjas está relacionada à sua qualidade? Quais tonalidades são indicativas de maior qualidade?"
+ ]
+ },
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
- "source": []
+ "source": [
+ "# Análise Exploratória da Relação entre Cor e Qualidade\n",
+ "# Calculando a média da qualidade para cada tonalidade de cor\n",
+ "color_quality = df.groupby('Color')['Quality (1-5)'].mean().sort_values()\n",
+ "\n",
+ "# Exibindo a tabela de médias de qualidade por cor para melhor visualização \n",
+ "print(\"Qualidade média por tonalidade de cor:\")\n",
+ "print(color_quality)\n",
+ "\n",
+ "# Gráfico de Barra Qualidade vs Tonalidade de Cor\n",
+ "plt.figure(figsize=(12, 8))\n",
+ "sns.barplot(x=color_quality.index, y=color_quality.values, palette=\"plasma\")\n",
+ "\n",
+ "# Configurações do Gráfico\n",
+ "plt.title('Qualidade Média das Laranjas por Tonalidade de Cor')\n",
+ "plt.xlabel('Tonalidade de Cor')\n",
+ "plt.ylabel('Qualidade Média')\n",
+ "plt.xticks(rotation=0)\n",
+ "plt.grid(axis='y', linestyle='--', alpha=0.6)\n",
+ "\n",
+ "# Adicionando os valores em cima das barras\n",
+ "for index, value in enumerate(color_quality.values):\n",
+ " plt.text(index, value + 0.05, f\"{value:.2f}\", ha='center', va='bottom', fontsize=10)\n",
+ "\n",
+ "\n",
+ "# Exibir o gráfico\n",
+ "plt.show()\n",
+ "\n",
+ "#Espaçamento para melhor visualização \n",
+ "print(' ')\n",
+ "print(' ')\n",
+ "print(' ')\n",
+ "print(' ')\n",
+ "\n",
+ "# Transformando a coluna 'color' em valores numéricos para utilizar a correlação\n",
+ "label_encoder = LabelEncoder()\n",
+ "df['color_encoded'] = label_encoder.fit_transform(df['Color'])\n",
+ "\n",
+ "# Cálculo da correlação entre cor e qualidade\n",
+ "correlation = df[['color_encoded', 'Quality (1-5)']].corr().iloc[0, 1]\n",
+ "print(f\"Correlação entre cor e qualidade: {correlation:.2f}\")\n",
+ "\n",
+ "# Gráfico de dispersão\n",
+ "plt.figure(figsize=(10, 6))\n",
+ "sns.scatterplot(x='color_encoded', y='Quality (1-5)', data=df, palette=\"plasma\", hue='Color', legend=False)\n",
+ "\n",
+ "# Configurações do gráfico de dispersão\n",
+ "plt.title('Correlação entre Cor das Laranjas e Qualidade')\n",
+ "plt.xlabel('Cor (Codificada)')\n",
+ "plt.ylabel('Qualidade')\n",
+ "plt.grid(True, linestyle='--', alpha=0.6)\n",
+ "\n",
+ "# Exibir o gráfico\n",
+ "plt.show()\n",
+ "\n",
+ "# Exibir cores originais, codificadas e qualidade em tabela para melhor entendimento\n",
+ "color_mapping = pd.DataFrame({\n",
+ " 'Original Color': label_encoder.classes_, # Cores originais\n",
+ " 'Encoded Color': range(len(label_encoder.classes_)), # Cores codificadas\n",
+ " 'Quality': [df[df['Color'] == color]['Quality (1-5)'].mean() for color in label_encoder.classes_] # Média da qualidade por cor\n",
+ "})\n",
+ "\n",
+ "print(\"\\nTabela de Cores e Qualidade:\")\n",
+ "print(color_mapping)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## c: Qual é a influência das manchas na avaliação da qualidade das laranjas?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Remover linhas onde \"Blemishes (Y/N)\" ou \"Quality (1-5)\" são NaN\n",
+ "df_clean = df.dropna(subset=['Blemishes (Y/N)', 'Quality (1-5)'])\n",
+ "\n",
+ "# Padronizando a coluna 'Blemishes (Y/N)' para conter apenas 'Y' ou 'N' devido a outras informações que contém na resposta\n",
+ "df['Blemishes (Y/N)'] = df['Blemishes (Y/N)'].apply(lambda x: 'Y' if 'Y' in str(x) else 'N')\n",
+ "\n",
+ "# Exibi valores únicos para confirmar a padronização\n",
+ "print(\"Valores únicos após padronização:\", df['Blemishes (Y/N)'].unique())\n",
+ "\n",
+ "# Convertendo 'Blemishes (Y/N)' para valores booleanos\n",
+ "df['Blemishes (Y/N)'] = df['Blemishes (Y/N)'].apply(lambda x: True if x == 'Y' else False)\n",
+ "\n",
+ "# Remover linhas onde \"Blemishes (Y/N)\" ou \"Quality (1-5)\" são NaN\n",
+ "df_clean = df.dropna(subset=['Blemishes (Y/N)', 'Quality (1-5)'])\n",
+ "# Resumo estatístico da qualidade com e sem manchas\n",
+ "quality_with_blemishes = df_clean[df_clean['Blemishes (Y/N)'] == True]['Quality (1-5)']\n",
+ "quality_without_blemishes = df_clean[df_clean['Blemishes (Y/N)'] == False]['Quality (1-5)']\n",
+ "\n",
+ "# Exibindo as médias para comparação com duas casas decimais\n",
+ "print(\"Qualidade média das laranjas com manchas:\", round(quality_with_blemishes.mean(), 2))\n",
+ "print(\"Qualidade média das laranjas sem manchas:\", round(quality_without_blemishes.mean(), 2))\n",
+ "\n",
+ "#Visualização\n",
+ "plt.figure(figsize=(10, 6))\n",
+ "sns.stripplot(data=df_clean, x='Blemishes (Y/N)', y='Quality (1-5)', palette=[\"#FFA07A\", \"#98FB98\"], jitter=True)\n",
+ "plt.title(\"Distribuição da Qualidade das Laranjas com e sem Manchas\")\n",
+ "plt.xlabel(\"Manchas\")\n",
+ "plt.ylabel(\"Qualidade\")\n",
+ "plt.show()\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## d: Como o tempo de colheita afeta as características das laranjas? Existem períodos ideais para a colheita que maximizam a qualidade?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Verificando as primeiras linhas para garantir que harvestTime é numérico\n",
+ "df['HarvestTime (days)'] = pd.to_numeric(df['HarvestTime (days)'], errors='coerce')\n",
+ "\n",
+ "# Agrupando as laranjas por faixas de tempo de colheita (ex: 10 dias)\n",
+ "bins = range(df['HarvestTime (days)'].min(), df['HarvestTime (days)'].max() + 10, 10) # Faixas de 10 dias\n",
+ "labels = [f\"{b}-{b+9}\" for b in bins[:-1]] # Criando rótulos para os bins\n",
+ "df['harvestPeriod'] = pd.cut(df['HarvestTime (days)'], bins=bins, labels=labels, right=False)\n",
+ "\n",
+ "# Calculando a média das variáveis para cada período de colheita\n",
+ "agg_df = df.groupby('harvestPeriod').agg({\n",
+ " 'Softness (1-5)': 'mean',\n",
+ " 'Brix (Sweetness)': 'mean',\n",
+ " 'pH (Acidity)': 'mean',\n",
+ " 'Quality (1-5)': 'mean'\n",
+ "}).reset_index()\n",
+ "\n",
+ "# Visualizando as médias das variáveis\n",
+ "plt.figure(figsize=(12, 8))\n",
+ "\n",
+ "# Plotando as variáveis\n",
+ "sns.lineplot(data=agg_df, x='harvestPeriod', y='Softness (1-5)', label='Maciez')\n",
+ "sns.lineplot(data=agg_df, x='harvestPeriod', y='Brix (Sweetness)', label='Doçura')\n",
+ "sns.lineplot(data=agg_df, x='harvestPeriod', y='pH (Acidity)', label='Acidez')\n",
+ "sns.lineplot(data=agg_df, x='harvestPeriod', y='Quality (1-5)', label='Qualidade')\n",
+ "\n",
+ "plt.title('Impacto do Tempo de Colheita nas Características das Laranjas')\n",
+ "plt.xlabel('Período de Colheita (Dias)')\n",
+ "plt.ylabel('Média das Características')\n",
+ "plt.legend(title='Características')\n",
+ "plt.grid(True)\n",
+ "plt.xticks(rotation=45)\n",
+ "plt.show()\n",
+ "\n",
+ "# Identificando o período com melhor qualidade média\n",
+ "melhor_periodo = agg_df.loc[agg_df['Quality (1-5)'].idxmax()]\n",
+ "print(f\"O período ideal de colheita para maximizar a qualidade das laranjas é o intervalo {melhor_periodo['harvestPeriod']}.\")\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## e: A presença de manchas afeta o pH ou a doçura das laranjas? Isso poderia indicar alguma relação entre defeitos visuais e características internas da fruta."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Limpeza da coluna 'Blemishes (Y/N)' para conter apenas 'Y' e 'N'\n",
+ "df['Blemishes (Y/N)'] = df['Blemishes (Y/N)'].apply(lambda x: 'Y' if 'Y' in str(x).upper() else 'N')\n",
+ "\n",
+ "# Contar as ocorrências de 'Y' e 'N' após a limpeza\n",
+ "contagem_manchas = df['Blemishes (Y/N)'].value_counts()\n",
+ "print(\"Contagem após limpeza:\")\n",
+ "print(contagem_manchas)\n",
+ "\n",
+ "# Separar os dados entre laranjas com e sem manchas\n",
+ "laranjas_com_manchas = df[df['Blemishes (Y/N)'] == 'Y']\n",
+ "laranjas_sem_manchas = df[df['Blemishes (Y/N)'] == 'N']\n",
+ "\n",
+ "# Calcular as médias de pH e doçura para cada grupo\n",
+ "media_ph_com_manchas = laranjas_com_manchas['pH (Acidity)'].mean()\n",
+ "media_ph_sem_manchas = laranjas_sem_manchas['pH (Acidity)'].mean()\n",
+ "media_brix_com_manchas = laranjas_com_manchas['Brix (Sweetness)'].mean()\n",
+ "media_brix_sem_manchas = laranjas_sem_manchas['Brix (Sweetness)'].mean()\n",
+ "\n",
+ "# Teste t para verificar a significância das diferenças de pH\n",
+ "teste_ph = ttest_ind(laranjas_com_manchas['pH (Acidity)'], laranjas_sem_manchas['pH (Acidity)'])\n",
+ "teste_brix = ttest_ind(laranjas_com_manchas['Brix (Sweetness)'], laranjas_sem_manchas['Brix (Sweetness)'])\n",
+ "\n",
+ "# Exibir os resultados\n",
+ "print(\"\\nMédia de pH com manchas:\", media_ph_com_manchas)\n",
+ "print(\"Média de pH sem manchas:\", media_ph_sem_manchas)\n",
+ "print(\"Resultado do teste t para pH:\", teste_ph)\n",
+ "\n",
+ "print(\"\\nMédia de Brix com manchas:\", media_brix_com_manchas)\n",
+ "print(\"Média de Brix sem manchas:\", media_brix_sem_manchas)\n",
+ "print(\"Resultado do teste t para Brix:\", teste_brix)\n",
+ "\n",
+ "# Conclusão com base no p-valor\n",
+ "if teste_ph.pvalue < 0.05:\n",
+ " print(\"\\nDiferença significativa no pH entre laranjas com e sem manchas.\")\n",
+ "else:\n",
+ " print(\"\\nNão há diferença significativa no pH entre laranjas com e sem manchas.\")\n",
+ "\n",
+ "if teste_brix.pvalue < 0.05:\n",
+ " print(\"Diferença significativa na doçura entre laranjas com e sem manchas.\")\n",
+ "else:\n",
+ " print(\"Não há diferença significativa na doçura entre laranjas com e sem manchas.\")\n",
+ "\n",
+ " # Dados para o gráfico\n",
+ "grupos = ['Com Manchas', 'Sem Manchas']\n",
+ "ph_means = [media_ph_com_manchas, media_ph_sem_manchas]\n",
+ "brix_means = [media_brix_com_manchas, media_brix_sem_manchas]\n",
+ "\n",
+ "# Criar o gráfico de barras\n",
+ "fig, ax = plt.subplots(figsize=(10, 6))\n",
+ "bar_width = 0.35\n",
+ "index = range(len(grupos))\n",
+ "\n",
+ "# Plotar as barras de pH e Brix\n",
+ "bar1 = ax.bar(index, ph_means, bar_width, label='pH (Acidity)', color='skyblue')\n",
+ "bar2 = ax.bar([i + bar_width for i in index], brix_means, bar_width, label='Brix (Sweetness)', color='salmon')\n",
+ "\n",
+ "# Configurar os rótulos e título\n",
+ "ax.set_xlabel('Presença de Manchas')\n",
+ "ax.set_ylabel('Média')\n",
+ "ax.set_title('Comparação de pH e Doçura entre Laranjas com e sem Manchas')\n",
+ "ax.set_xticks([i + bar_width / 2 for i in index])\n",
+ "ax.set_xticklabels(grupos)\n",
+ "ax.legend()\n",
+ "\n",
+ "# Adicionar os valores em cima de cada barra\n",
+ "for bar in bar1 + bar2:\n",
+ " height = bar.get_height()\n",
+ " ax.annotate(f'{height:.2f}',\n",
+ " xy=(bar.get_x() + bar.get_width() / 2, height),\n",
+ " xytext=(0, 3), # 3 points de deslocamento\n",
+ " textcoords=\"offset points\",\n",
+ " ha='center', va='bottom')\n",
+ "\n",
+ "plt.tight_layout()\n",
+ "plt.show()"
+ ]
},
{
"cell_type": "markdown",
@@ -56,7 +818,89 @@
"execution_count": null,
"metadata": {},
"outputs": [],
- "source": []
+ "source": [
+ "'''\n",
+ "a) Como a maciez das laranjas varia com o tempo de colheita e o estágio de maturação? Laranjas mais maduras são sempre mais macias?\n",
+ " \n",
+ " As laranjas apresentaram uma maciez média de 3.07 em uma escala de 1 a 5, indicando uma maciez moderada. O tempo de colheita varia de \n",
+ "4 a 25 dias (média de 15 dias) e mostrou uma correlação fraca, mas positiva (0.331) com a maciez, sugerindo que laranjas colhidas mais \n",
+ "tarde tendem a ser um pouco mais macias, embora essa relação não seja forte. Quanto à maturação, com média de 3.6 (em uma escala de 1 a 5),\n",
+ "houve uma correlação fraca e negativa (-0.202) com a maciez, sugerindo que, ao contrário do esperado, as laranjas mais maduras não são \n",
+ "necessariamente mais macias — na verdade, a maciez pode diminuir levemente conforme a maturação aumenta. Conclui-se que laranjas mais \n",
+ "maduras não são sempre mais macias, e que outros fatores, como a variedade e as condições de cultivo, podem influenciar essa característica. \n",
+ "'''"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "''' \n",
+ "b: A cor das laranjas está relacionada à sua qualidade? Quais tonalidades são indicativas de maior qualidade?\n",
+ "\n",
+ "A correlação calculada é de -0.12.\n",
+ "Interpretação dos Resultados\n",
+ "Qualidade Média: A análise mostra que a tonalidade Deep Orange apresenta a maior qualidade média (4.31), \n",
+ "seguida por Yellow-Orange (4.22). Isso indica que as laranjas dessas cores tendem a ser avaliadas como de maior \n",
+ "qualidade. Tonalidades Menores: As tonalidades Light Orange, Orange, e Orange-Red têm médias de qualidade inferiores \n",
+ "(3.28 a 3.75), sugerindo que essas cores estão associadas a uma qualidade menor em comparação às tonalidades mais escuras.\n",
+ "Correlação Negativa: A correlação de -0.12 indica uma relação fraca e negativa entre a cor das laranjas e sua qualidade.\n",
+ "Isso sugere que, embora existam variações na qualidade média entre as diferentes tonalidades, não há uma relação forte que\n",
+ "indique que a cor mais intensa sempre resulta em maior qualidade.\n",
+ "'''"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "'''\n",
+ "c: Qual é a influência das manchas na avaliação da qualidade das laranjas?\n",
+ "\n",
+ "Se as médias de qualidade das laranjas com manchas forem mais baixas, isso pode indicar que as manchas afetam negativamente a percepção de qualidade, talvez devido a uma associação com defeitos estéticos ou defeitos que afetam o sabor e a textura.\n",
+ "Se a distribuição da qualidade das laranjas com manchas for mais dispersa (com mais variação), pode sugerir que enquanto algumas laranjas com manchas podem ainda ter boa qualidade, outras têm qualidade significativamente inferior.\n",
+ "Se a média de qualidade das laranjas sem manchas for mais alta, podemos concluir que as manchas provavelmente indicam algum defeito que compromete a qualidade geral do produto.\n",
+ "Essas análises podem ser complementadas por métodos estatísticos, como o teste t para comparar as médias e verificar se a diferença é estatisticamente significativa.\n",
+ "'''"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "'''\n",
+ "d: Como o tempo de colheita afeta as características das laranjas? Existem períodos ideais para a colheita que maximizam a qualidade?\n",
+ "\n",
+ "Maciez (Softness): A maciez das laranjas parece melhorar conforme o tempo de colheita aumenta, subindo de 2.74 para 3.30 e\n",
+ "mantendo-se praticamente estável na faixa de 3.27.\n",
+ "Doçura (Brix): A doçura diminui ao longo do tempo de colheita, caindo de 11.88 para 10.28 e, por fim, para 9.91.\n",
+ "Acidez (pH): A acidez parece se manter relativamente estável, com um leve aumento de 3.37 para 3.54, e então se estabiliza em 3.53.\n",
+ "Qualidade (Quality): A qualidade das laranjas segue uma tendência de declínio, começando em 4.31 (ótima qualidade) e caindo para 3.53 e \n",
+ "3.00, o que sugere uma perda de qualidade à medida que a colheita avança.\n",
+ "'''"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "'''\n",
+ "e: A presença de manchas afeta o pH ou a doçura das laranjas? Isso poderia indicar alguma relação entre defeitos visuais e características internas da fruta.\n",
+ "\n",
+ "Laranjas com manchas têm um pH médio de 3,63, significativamente maior que o pH de 3,38 das laranjas sem manchas, \n",
+ "indicando uma leve diferença de acidez entre elas. Em relação à doçura, medida pelo índice Brix, não houve diferença \n",
+ "significativa, com médias de 10,72 para laranjas com manchas e 11,02 para as sem manchas. Assim, enquanto as manchas afetam \n",
+ "o pH, elas não influenciam a doçura da fruta.\n",
+ "'''"
+ ]
}
],
"metadata": {
@@ -75,12 +919,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.10.11"
- },
- "vscode": {
- "interpreter": {
- "hash": "eb3c3305d8b111f0102f4f519c5f17abd113fe74db6752c355e994a9008815ef"
- }
+ "version": "3.10.12"
}
},
"nbformat": 4,
diff --git a/notebooks/02-comparative_analysis.ipynb b/notebooks/02-comparative_analysis.ipynb
new file mode 100644
index 0000000..7dacc02
--- /dev/null
+++ b/notebooks/02-comparative_analysis.ipynb
@@ -0,0 +1,604 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "id": "9ac77964-6839-483a-a78c-919a8b7ef36e",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "### Import de bibliotecas para manipulação dos dados \n",
+ "import pandas as pd\n",
+ "import numpy as np\n",
+ "from sklearn.preprocessing import LabelEncoder"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "9294e6f8-9a74-44ca-b359-af5e0a92175e",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Size (cm) | \n",
+ " Weight (g) | \n",
+ " Brix (Sweetness) | \n",
+ " pH (Acidity) | \n",
+ " Softness (1-5) | \n",
+ " HarvestTime (days) | \n",
+ " Ripeness (1-5) | \n",
+ " Color | \n",
+ " Variety | \n",
+ " Blemishes (Y/N) | \n",
+ " Quality (1-5) | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 7.5 | \n",
+ " 180 | \n",
+ " 12.0 | \n",
+ " 3.2 | \n",
+ " 2.0 | \n",
+ " 10 | \n",
+ " 4.0 | \n",
+ " Orange | \n",
+ " Valencia | \n",
+ " N | \n",
+ " 4.0 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 8.2 | \n",
+ " 220 | \n",
+ " 10.5 | \n",
+ " 3.4 | \n",
+ " 3.0 | \n",
+ " 14 | \n",
+ " 4.5 | \n",
+ " Deep Orange | \n",
+ " Navel | \n",
+ " N | \n",
+ " 4.5 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 6.8 | \n",
+ " 150 | \n",
+ " 14.0 | \n",
+ " 3.0 | \n",
+ " 1.0 | \n",
+ " 7 | \n",
+ " 5.0 | \n",
+ " Light Orange | \n",
+ " Cara Cara | \n",
+ " N | \n",
+ " 5.0 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 9.0 | \n",
+ " 250 | \n",
+ " 8.5 | \n",
+ " 3.8 | \n",
+ " 4.0 | \n",
+ " 21 | \n",
+ " 3.5 | \n",
+ " Orange-Red | \n",
+ " Blood Orange | \n",
+ " N | \n",
+ " 3.5 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 8.5 | \n",
+ " 210 | \n",
+ " 11.5 | \n",
+ " 3.3 | \n",
+ " 2.5 | \n",
+ " 12 | \n",
+ " 5.0 | \n",
+ " Orange | \n",
+ " Hamlin | \n",
+ " Y (Minor) | \n",
+ " 4.5 | \n",
+ "
\n",
+ " \n",
+ " 5 | \n",
+ " 6.7 | \n",
+ " 126 | \n",
+ " 9.1 | \n",
+ " 3.0 | \n",
+ " 2.0 | \n",
+ " 25 | \n",
+ " 2.0 | \n",
+ " Orange | \n",
+ " Navel | \n",
+ " N | \n",
+ " 1.0 | \n",
+ "
\n",
+ " \n",
+ " 6 | \n",
+ " 7.2 | \n",
+ " 160 | \n",
+ " 9.0 | \n",
+ " 3.5 | \n",
+ " 3.5 | \n",
+ " 9 | \n",
+ " 4.0 | \n",
+ " Yellow-Orange | \n",
+ " Tangelo (Hybrid) | \n",
+ " N | \n",
+ " 4.0 | \n",
+ "
\n",
+ " \n",
+ " 7 | \n",
+ " 6.5 | \n",
+ " 130 | \n",
+ " 13.5 | \n",
+ " 2.8 | \n",
+ " 1.5 | \n",
+ " 5 | \n",
+ " 4.5 | \n",
+ " Light Orange | \n",
+ " Murcott (Hybrid) | \n",
+ " N | \n",
+ " 4.5 | \n",
+ "
\n",
+ " \n",
+ " 8 | \n",
+ " 8.8 | \n",
+ " 240 | \n",
+ " 7.5 | \n",
+ " 4.0 | \n",
+ " 5.0 | \n",
+ " 18 | \n",
+ " 3.0 | \n",
+ " Deep Orange | \n",
+ " Moro (Blood) | \n",
+ " Y (Sunburn) | \n",
+ " 3.0 | \n",
+ "
\n",
+ " \n",
+ " 9 | \n",
+ " 7.8 | \n",
+ " 190 | \n",
+ " 12.0 | \n",
+ " 3.1 | \n",
+ " 2.0 | \n",
+ " 11 | \n",
+ " 4.5 | \n",
+ " Orange | \n",
+ " Jaffa | \n",
+ " N | \n",
+ " 5.0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Size (cm) Weight (g) Brix (Sweetness) pH (Acidity) Softness (1-5) \\\n",
+ "0 7.5 180 12.0 3.2 2.0 \n",
+ "1 8.2 220 10.5 3.4 3.0 \n",
+ "2 6.8 150 14.0 3.0 1.0 \n",
+ "3 9.0 250 8.5 3.8 4.0 \n",
+ "4 8.5 210 11.5 3.3 2.5 \n",
+ "5 6.7 126 9.1 3.0 2.0 \n",
+ "6 7.2 160 9.0 3.5 3.5 \n",
+ "7 6.5 130 13.5 2.8 1.5 \n",
+ "8 8.8 240 7.5 4.0 5.0 \n",
+ "9 7.8 190 12.0 3.1 2.0 \n",
+ "\n",
+ " HarvestTime (days) Ripeness (1-5) Color Variety \\\n",
+ "0 10 4.0 Orange Valencia \n",
+ "1 14 4.5 Deep Orange Navel \n",
+ "2 7 5.0 Light Orange Cara Cara \n",
+ "3 21 3.5 Orange-Red Blood Orange \n",
+ "4 12 5.0 Orange Hamlin \n",
+ "5 25 2.0 Orange Navel \n",
+ "6 9 4.0 Yellow-Orange Tangelo (Hybrid) \n",
+ "7 5 4.5 Light Orange Murcott (Hybrid) \n",
+ "8 18 3.0 Deep Orange Moro (Blood) \n",
+ "9 11 4.5 Orange Jaffa \n",
+ "\n",
+ " Blemishes (Y/N) Quality (1-5) \n",
+ "0 N 4.0 \n",
+ "1 N 4.5 \n",
+ "2 N 5.0 \n",
+ "3 N 3.5 \n",
+ "4 Y (Minor) 4.5 \n",
+ "5 N 1.0 \n",
+ "6 N 4.0 \n",
+ "7 N 4.5 \n",
+ "8 Y (Sunburn) 3.0 \n",
+ "9 N 5.0 "
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "#Caminho e leitura do Dataframe\n",
+ "df = pd.read_csv('../data/raw/Orange_Quality_Data.csv')\n",
+ "\n",
+ "#Análise das 10 primeiras linhas \n",
+ "df.head(10)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "b2e54532-a49e-435b-ae1e-de463bd88813",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "## 1. Tratamento de dados discrepantes"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "ff9f43bf-c7f7-441b-9d08-df733266df40",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Quantidade de outlier\n",
+ "Outliers na coluna Size (cm): 0\n",
+ "Outliers na coluna Weight (g): 0\n",
+ "Outliers na coluna Brix (Sweetness): 0\n",
+ "Outliers na coluna pH (Acidity): 0\n",
+ "Outliers na coluna Softness (1-5): 0\n",
+ "Outliers na coluna HarvestTime (days): 0\n",
+ "Outliers na coluna Ripeness (1-5): 0\n",
+ " \n",
+ " \n",
+ "Quantidade de outlier após tratamento\n",
+ "Outliers na coluna Size (cm) após o tratamento: 0\n",
+ "Outliers na coluna Weight (g) após o tratamento: 0\n",
+ "Outliers na coluna Brix (Sweetness) após o tratamento: 0\n",
+ "Outliers na coluna pH (Acidity) após o tratamento: 0\n",
+ "Outliers na coluna Softness (1-5) após o tratamento: 0\n",
+ "Outliers na coluna HarvestTime (days) após o tratamento: 0\n",
+ "Outliers na coluna Ripeness (1-5) após o tratamento: 0\n",
+ " \n",
+ "Dataframe após remoção de outliers:\n",
+ " Size (cm) Weight (g) Brix (Sweetness) pH (Acidity) Softness (1-5) \\\n",
+ "0 7.5 180 12.0 3.2 2.0 \n",
+ "1 8.2 220 10.5 3.4 3.0 \n",
+ "2 6.8 150 14.0 3.0 1.0 \n",
+ "3 9.0 250 8.5 3.8 4.0 \n",
+ "4 8.5 210 11.5 3.3 2.5 \n",
+ ".. ... ... ... ... ... \n",
+ "236 8.0 194 10.9 3.6 5.0 \n",
+ "237 7.4 275 8.5 3.5 5.0 \n",
+ "238 7.5 196 15.7 3.0 3.0 \n",
+ "239 7.2 251 9.8 4.3 3.0 \n",
+ "240 7.3 282 10.5 2.9 4.0 \n",
+ "\n",
+ " HarvestTime (days) Ripeness (1-5) Color Variety \\\n",
+ "0 10 4.0 Orange Valencia \n",
+ "1 14 4.5 Deep Orange Navel \n",
+ "2 7 5.0 Light Orange Cara Cara \n",
+ "3 21 3.5 Orange-Red Blood Orange \n",
+ "4 12 5.0 Orange Hamlin \n",
+ ".. ... ... ... ... \n",
+ "236 13 1.0 Orange-Red Tangerine \n",
+ "237 20 5.0 Light Orange Minneola (Hybrid) \n",
+ "238 13 3.0 Deep Orange Temple \n",
+ "239 23 1.0 Light Orange Moro (Blood) \n",
+ "240 21 2.0 Orange-Red Jaffa \n",
+ "\n",
+ " Blemishes (Y/N) Quality (1-5) \n",
+ "0 N 4.0 \n",
+ "1 N 4.5 \n",
+ "2 N 5.0 \n",
+ "3 N 3.5 \n",
+ "4 Y (Minor) 4.5 \n",
+ ".. ... ... \n",
+ "236 Y (Scars) 5.0 \n",
+ "237 N 4.0 \n",
+ "238 Y (Minor Insect Damage) 5.0 \n",
+ "239 Y (Minor Insect Damage) 3.0 \n",
+ "240 Y (Minor) 4.0 \n",
+ "\n",
+ "[241 rows x 11 columns]\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Supondo que o DataFrame seja chamado 'df'\n",
+ "def detect_outliers(df, column):\n",
+ " # Calcula Q1 (25%) e Q3 (75%) para a coluna especificada\n",
+ " Q1 = df[column].quantile(0.25)\n",
+ " Q3 = df[column].quantile(0.75)\n",
+ " IQR = Q3 - Q1\n",
+ " \n",
+ " # Define os limites para detectar outliers\n",
+ " lower_bound = Q1 - 1.5 * IQR\n",
+ " upper_bound = Q3 + 1.5 * IQR\n",
+ " \n",
+ " # Detecta os outliers\n",
+ " outliers = df[(df[column] < lower_bound) | (df[column] > upper_bound)]\n",
+ " return outliers\n",
+ "\n",
+ "def remove_outliers(df, column):\n",
+ " # Calcula Q1 (25%) e Q3 (75%) para a coluna especificada\n",
+ " Q1 = df[column].quantile(0.25)\n",
+ " Q3 = df[column].quantile(0.75)\n",
+ " IQR = Q3 - Q1\n",
+ " \n",
+ " # Define os limites para detectar outliers\n",
+ " lower_bound = Q1 - 1.5 * IQR\n",
+ " upper_bound = Q3 + 1.5 * IQR\n",
+ " \n",
+ " # Filtra o DataFrame para manter apenas os valores dentro dos limites\n",
+ " filtered_df = df[(df[column] >= lower_bound) & (df[column] <= upper_bound)]\n",
+ " return filtered_df\n",
+ "\n",
+ "# Imprime a quantidade de outliers antes do tratamento\n",
+ "print(f\"Quantidade de outlier\")\n",
+ "for col in ['Size (cm)', 'Weight (g)', 'Brix (Sweetness)', 'pH (Acidity)', 'Softness (1-5)', 'HarvestTime (days)', 'Ripeness (1-5)']:\n",
+ " outliers = detect_outliers(df, col)\n",
+ " print(f\"Outliers na coluna {col}: {len(outliers)}\")\n",
+ "\n",
+ "# Aplica a função para cada coluna contínua\n",
+ "\n",
+ "for col in ['Size (cm)', 'Weight (g)', 'Brix (Sweetness)', 'pH (Acidity)', 'Softness (1-5)', 'HarvestTime (days)', 'Ripeness (1-5)']:\n",
+ " df = remove_outliers(df, col)\n",
+ "print(f\" \")\n",
+ "print(f\" \")\n",
+ "# Imprime a quantidade de outliers após o tratamento\n",
+ "print(f\"Quantidade de outlier após tratamento\")\n",
+ "for col in ['Size (cm)', 'Weight (g)', 'Brix (Sweetness)', 'pH (Acidity)', 'Softness (1-5)', 'HarvestTime (days)', 'Ripeness (1-5)']:\n",
+ " outliers = detect_outliers(df, col)\n",
+ " print(f\"Outliers na coluna {col} após o tratamento: {len(outliers)}\")\n",
+ " \n",
+ "print(f\" \")\n",
+ "print(\"Dataframe após remoção de outliers:\\n\", df)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "8e8c5415-f8bf-44a9-a0c7-7a4b22ee5b52",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "## 2. Tratamento de dados faltantes"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "id": "b6e99ea0-1520-43b4-90e8-7408cc947557",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Dados faltantes por coluna:\n",
+ " Size (cm) 0\n",
+ "Weight (g) 0\n",
+ "Brix (Sweetness) 0\n",
+ "pH (Acidity) 0\n",
+ "Softness (1-5) 0\n",
+ "HarvestTime (days) 0\n",
+ "Ripeness (1-5) 0\n",
+ "Color 0\n",
+ "Variety 0\n",
+ "Blemishes (Y/N) 0\n",
+ "Quality (1-5) 0\n",
+ "dtype: int64\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Verifica a quantidade de valores nulos em cada coluna\n",
+ "print(\"Dados faltantes por coluna:\\n\", df.isnull().sum())\n",
+ "\n",
+ "# Removendo linhas com valores faltantes se forem insignificantes\n",
+ "#df = df.dropna(thresh=len(df.columns) - 2) # Mantém linhas com até 2 valores nulos\n",
+ "\n",
+ "# Preenchendo valores faltantes com média ou mediana\n",
+ "#df['Size (cm)'].fillna(df['Size (cm)'].mean(), inplace=True)\n",
+ "#df['Weight (g)'].fillna(df['Weight (g)'].median(), inplace=True)\n",
+ "#df['Brix (Sweetness)'].fillna(df['Brix (Sweetness)'].mean(), inplace=True)\n",
+ "#df['pH (Acidity)'].fillna(df['pH (Acidity)'].median(), inplace=True)\n",
+ "\n",
+ "#print(\"Dataframe após tratamento de valores faltantes:\\n\", df)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "bd5f76bd-37c5-4be0-967d-0127bafdf88d",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "## 3. Codificação de variáveis"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "id": "1d04f9b2-5e99-4a3f-bfe4-f74c688abda9",
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Dataframe após codificação de variáveis:\n",
+ " Size (cm) Weight (g) Brix (Sweetness) pH (Acidity) Softness (1-5) \\\n",
+ "0 7.5 180 12.0 3.2 2.0 \n",
+ "1 8.2 220 10.5 3.4 3.0 \n",
+ "2 6.8 150 14.0 3.0 1.0 \n",
+ "3 9.0 250 8.5 3.8 4.0 \n",
+ "4 8.5 210 11.5 3.3 2.5 \n",
+ ".. ... ... ... ... ... \n",
+ "236 8.0 194 10.9 3.6 5.0 \n",
+ "237 7.4 275 8.5 3.5 5.0 \n",
+ "238 7.5 196 15.7 3.0 3.0 \n",
+ "239 7.2 251 9.8 4.3 3.0 \n",
+ "240 7.3 282 10.5 2.9 4.0 \n",
+ "\n",
+ " HarvestTime (days) Ripeness (1-5) Blemishes (Y/N) Quality (1-5) \\\n",
+ "0 10 0.8 0 0.8 \n",
+ "1 14 0.9 0 0.9 \n",
+ "2 7 1.0 0 1.0 \n",
+ "3 21 0.7 0 0.7 \n",
+ "4 12 1.0 6 0.9 \n",
+ ".. ... ... ... ... \n",
+ "236 13 0.2 8 1.0 \n",
+ "237 20 1.0 0 0.8 \n",
+ "238 13 0.6 5 1.0 \n",
+ "239 23 0.2 5 0.6 \n",
+ "240 21 0.4 6 0.8 \n",
+ "\n",
+ " Variety_encoded ... Variety_Navel (Early Season) \\\n",
+ "0 22 ... False \n",
+ "1 13 ... False \n",
+ "2 3 ... False \n",
+ "3 1 ... False \n",
+ "4 6 ... False \n",
+ ".. ... ... ... \n",
+ "236 20 ... False \n",
+ "237 10 ... False \n",
+ "238 21 ... False \n",
+ "239 11 ... False \n",
+ "240 8 ... False \n",
+ "\n",
+ " Variety_Navel (Late Season) Variety_Ortanique (Hybrid) \\\n",
+ "0 False False \n",
+ "1 False False \n",
+ "2 False False \n",
+ "3 False False \n",
+ "4 False False \n",
+ ".. ... ... \n",
+ "236 False False \n",
+ "237 False False \n",
+ "238 False False \n",
+ "239 False False \n",
+ "240 False False \n",
+ "\n",
+ " Variety_Satsuma Mandarin Variety_Star Ruby Variety_Tangelo (Hybrid) \\\n",
+ "0 False False False \n",
+ "1 False False False \n",
+ "2 False False False \n",
+ "3 False False False \n",
+ "4 False False False \n",
+ ".. ... ... ... \n",
+ "236 False False False \n",
+ "237 False False False \n",
+ "238 False False False \n",
+ "239 False False False \n",
+ "240 False False False \n",
+ "\n",
+ " Variety_Tangerine Variety_Temple Variety_Valencia \\\n",
+ "0 False False True \n",
+ "1 False False False \n",
+ "2 False False False \n",
+ "3 False False False \n",
+ "4 False False False \n",
+ ".. ... ... ... \n",
+ "236 True False False \n",
+ "237 False False False \n",
+ "238 False True False \n",
+ "239 False False False \n",
+ "240 False False False \n",
+ "\n",
+ " Variety_Washington Navel \n",
+ "0 False \n",
+ "1 False \n",
+ "2 False \n",
+ "3 False \n",
+ "4 False \n",
+ ".. ... \n",
+ "236 False \n",
+ "237 False \n",
+ "238 False \n",
+ "239 False \n",
+ "240 False \n",
+ "\n",
+ "[241 rows x 39 columns]\n"
+ ]
+ }
+ ],
+ "source": [
+ "# 1. Codificação da coluna 'Color' (nominal) usando One-Hot Encoding\n",
+ "df = pd.get_dummies(df, columns=['Color'], prefix='Color', drop_first=False)\n",
+ "\n",
+ "# 2. Codificação da coluna 'Variety' (nominal) usando One-Hot Encoding\n",
+ "df = pd.get_dummies(df, columns=['Variety'], prefix='Variety', drop_first=False)\n",
+ "\n",
+ "# 3. Codificação da coluna 'Blemishes (Y/N)' (binária) usando Label Encoding\n",
+ "le = LabelEncoder()\n",
+ "df['Blemishes (Y/N)'] = le.fit_transform(df['Blemishes (Y/N)'])\n",
+ "\n",
+ "# Exibe o DataFrame após a codificação\n",
+ "print(\"Dataframe após codificação de variáveis:\\n\", df)"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.10.12"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}