diff --git a/Carolyne-Santos/para-casa/README.md b/Carolyne-Santos/para-casa/README.md new file mode 100644 index 0000000..e23b021 --- /dev/null +++ b/Carolyne-Santos/para-casa/README.md @@ -0,0 +1,176 @@ +# 📈📉📊🎲 Análise com Python - Pandas e Numpy II + +## 📚 Descrição da Atividade + +Exercicio para casa semana 12. Analise o dataset Employee. + +## 📋 Passo a Passo + +## 🟦 Atividade 1 - Use o arquivo `Employee.csv` para análise: + + ### - Bibliotecas Utilizadas: + +# Bibliotecas + + # Biblioteca + import pandas as pd + import matplotlib.pyplot as plt + + # Carregando o arquivo 'Employee.csv' + df = pd.read_csv(r"C:\Users\carol\OneDrive\Área de Trabalho\Reprograma\on33-python-s12-pandas-numpy-II\material\Employee.csv") + + # Visualizar df + print(df.head()) + +## 🟦 Atividade 2 - Faça a limpeza do seu dataframe excluindo linhas duplicadas ou preenchendo valores nulos: + + #Consultar nulos + print(df.isnull().sum()) + + #Consultar duplicadas + print(df.duplicated().sum()) + + #Excluir duplicadas + print(df.drop_duplicates(inplace=True)) + + +## 🟦 Atividade 3 - Crie um dataframe que tenha os empregados que trabalham na empresa a mais de 5 anos: + + #Filtro + mais_5_anos = df.where((df["ExperienceInCurrentDomain"] > 5)) + + #Visualizar a df com a funcao filtro aplicada + print(mais_5_anos.info()) + +## 🟦 Atividade 4 - Agrupe os empregados por gênero e idade e crie um gráfico para cada caso: + + # Media, Maxima e Minima idade do df + mean_age = df['Age'].mean() + max_age = df['Age'].max() + min_age = df['Age'].min() + + print(f'Idade minina: {min_age}') + print(f'Media de Idade: {round(mean_age)}') + print(f'Idade maxima: {max_age}') + + # Agrupar por Gênero e Idade + Age_Female = df[df['Gender'] == 'Female']['Age'].value_counts().sort_index() + + # Plotar gráfico para cada gênero + Age_Female.plot(kind='bar', title='Distribuição do Número de Mulheres por Idade') + + # visualizar grafico + plt.show() + + # Salvar o grafico + plt.savefig('grafico_barras1.png') ##para salvar automaticamente o grafico + +![Grafico1](https://github.com/CarolyneS14/on33-python-s12-pandas-numpy-II/blob/main/Carolyne-Santos/para-casa/grafico_barras1.png) + + # Agrupar por Gênero e Idade + Age_Male = df[df['Gender'] == 'Male']['Age'].value_counts().sort_index() + + # Plotar gráfico para cada gênero + Age_Male.plot(kind='bar', title='Distribuição do Número de Homens por Idade') + + # visualizar grafico + plt.show() + + # Salvar o grafico + plt.savefig('grafico_barras2.png') ##para salvar automaticamente o grafico + +![Grafico2](https://github.com/CarolyneS14/on33-python-s12-pandas-numpy-II/blob/main/Carolyne-Santos/para-casa/grafico_barras2.png) + +## 🟦 Atividade 5 - Veja qual a cidade que mais tem empregados e faça uma média do tempo de serviço dos empregados por cidade: + + # Quantidade de cidades + print(df['City'].value_counts()) + + # Cidade com a maior quantidade de empregados + mais_empregados = df['City'].value_counts().idxmax() + print(f' A Cidade com a maior quantidade de empregados é: {mais_empregados}') + + # Média de tempo de serviço por cidade + # Calcular a média do tempo de serviço por cidade + tempo_medio_servico = df.groupby('City')['ExperienceInCurrentDomain'].mean() + + # Exibir a média de tempo de serviço para cada cidade + for cidade, media in tempo_medio_servico.items(): + print(f'A média do tempo de serviço em {cidade} é de: {media:.1f} anos') + + +## 🟦 Atividade 6 - Faça a porcentagem de quantos empregados ainda trabalham na empresa (use a coluna `LeaveOrNot` do dataframe): + + # Considerando + # 0 = O empregado ainda trabalha na empresa. + # 1 = O empregado deixou a empresa. + + # Total de empregados + total_empregados = df['LeaveOrNot'].count() + + # Total de empregados que ainda trabalham na empresa (LeaveOrNot == 0) + empregados_ativos = df[df['LeaveOrNot'] == 0].count()['LeaveOrNot'] + + # Cálculo da porcentagem de empregados ativos + porcentagem_ativos = (empregados_ativos / total_empregados) * 100 + + # Exibir os resultados + print(f'Total de empregados na base de dados: {total_empregados}') + print(f'Total de empregados ativos na empresa: {empregados_ativos}') + print(f'A porcentagem de empregados que ainda trabalham na empresa é: {porcentagem_ativos:.2f}%') + + +## 🟦 Atividade 7 - Conte quantos empregados existem por `PaymentTier`: + + # Filtrar os dados onde 'LeaveOrNot' == 0 + empregados_ativos = df[df['LeaveOrNot'] == 0] + + # Contar quantos empregados existem por 'PaymentTier' entre os que ainda trabalham na empresa + total_filtrado = empregados_ativos['PaymentTier'].value_counts() + + # Visualizar o resultado da contagem por 'PaymentTier' + print(total_filtrado) + +## 🟦 Atividade 8 - Substitua os valores da coluna `EverBenched` para `True` ou `False`: + + # Substituir valores da coluna 'EverBenched' para 'True' ou 'False' + df['EverBenched'] = df['EverBenched'].replace({'Yes': True, 'No': False}) + + # Verificar a substituição + print(df[['EverBenched']].head()) + + # Verificar df depois da alteracao + print(df.head()) + +## 🟦 Atividade 9 - Crie um gráfico de pizza com o resultado da coluna `EverBenched` e outro com `LeaveOrNot`: + + # Gráfico de pizza para a coluna 'EverBenched' + total_ever_benched = df['EverBenched'].value_counts() + plt.figure(figsize=(12, 6)) + + plt.subplot(1, 2, 1) # 1 linha, 2 colunas, gráfico 1. Ultilizado para juntar os graficos em uma unica tela. + plt.pie(total_ever_benched, labels=total_ever_benched.index, autopct='%1.1f%%') #autopct = define como as %% seram exibidas no grafico. + plt.title('Distribuição de Empregados Disponiveis Para Projetos') + + # Gráfico de pizza para a coluna 'LeaveOrNot' + total_leave_or_not = df['LeaveOrNot'].value_counts() + plt.subplot(1, 2, 2) # 1 linha, 2 colunas, gráfico 2. Ultilizado para juntar os graficos em uma unica tela. + labels = ['Sim' if index == 0 else 'Não' for index in total_leave_or_not.index] + plt.pie(total_leave_or_not, labels=labels, autopct='%1.1f%%') #autopct = define como as %% seram exibidas no grafico. + plt.title('Distribuição de Empregados Ativos') + + # Ajustar layout e exibir + plt.tight_layout() + plt.show() + + # Salvar o grafico + plt.savefig('grafico_pizza.png') ##para salvar automaticamente o grafico + +![GraficosPizza](https://github.com/CarolyneS14/on33-python-s12-pandas-numpy-II/blob/main/Carolyne-Santos/para-casa/grafico_pizza.png) + +## 👩🏻‍🏫 Professora Manuelly Suzik. + + + [![LinkdIn](https://img.shields.io/badge/LinkedIn-0077B5?style=for-the-badge&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/manuellysuzik/) +
+ [![GitHub](https://img.shields.io/badge/GitHub-100000?style=for-the-badge&logo=github&logoColor=white)](https://github.com/manuellysuzik)
diff --git a/Carolyne-Santos/para-casa/analise_employee.py b/Carolyne-Santos/para-casa/analise_employee.py new file mode 100644 index 0000000..310f229 --- /dev/null +++ b/Carolyne-Santos/para-casa/analise_employee.py @@ -0,0 +1,157 @@ +# - Analise o dataset Employee e extraia as seguintes informações: +# Bibliotecas + +import pandas as pd +import matplotlib.pyplot as plt + +#Ler arquivo csv +df = pd.read_csv(r"C:\Users\carol\OneDrive\Área de Trabalho\Reprograma\on33-python-s12-pandas-numpy-II\material\Employee.csv") + +#Visualizar meu df +print(df.head()) +print(df.describe()) ##retornar informacoes descritivas do dataframe +print(df.info()) ##Retorna as informacoes de valores nulos por coluna e o dtype + +## - Faça a limpeza do seu dataframe excluindo linhas duplicadas ou preenchendo valores nulos: + + +#Consultar nulos +print(df.isnull().sum()) + +#Consultar duplicadas +print(df.duplicated().sum()) + +#Excluir duplicadas +print(df.drop_duplicates(inplace=True)) + +## - Crie um dataframe que tenha os empregados que trabalham na empresa a mais de 5 anos: + + +#Filtro +mais_5_anos = df.where((df['ExperienceInCurrentDomain'] > 5)) + +#Visualizar a df com a funcao filtro aplicada +print(mais_5_anos.info()) + +## - Agrupe os empregados por gênero e idade e crie um gráfico para cada caso: + + +#Media, Maxima e Minima idade do df +mean_age = df['Age'].mean() +max_age = df['Age'].max() +min_age = df['Age'].min() + +print(f'Idade minina: {min_age}') +print(f'Media de Idade: {round(mean_age)}') +print(f'Idade maxima: {max_age}') + +# Agrupar por Gênero e Idade +Age_Female = df[df['Gender'] == 'Female']['Age'].value_counts().sort_index() + +# Plotar gráfico para cada gênero +Age_Female.plot(kind='bar', title='Distribuição do Número de Mulheres por Idade') + +#visualizar grafico +plt.show() + +# Salvar o grafico +plt.savefig('grafico_barras1.png') ##para salvar automaticamente o grafico + +# Agrupar por Gênero e Idade +Age_Male = df[df['Gender'] == 'Male']['Age'].value_counts().sort_index() + +# Plotar gráfico para cada gênero +Age_Male.plot(kind='bar', title='Distribuição do Número de Homens por Idade') + +# visualizar grafico +plt.show() + +# Salvar o grafico +plt.savefig('grafico_barras2.png') ##para salvar automaticamente o grafico + +## - Veja qual a cidade que mais tem empregados e faça uma média do tempo de serviço dos empregados por cidade: + + +#Quantidade de cidades +print(df['City'].value_counts()) + +#Cidade com a maior quantidade de empregados +mais_empregados = df['City'].value_counts().idxmax() +print(f' A Cidade com a maior quantidade de empregados é: {mais_empregados}') + +# Média de tempo de serviço por cidade +# Calcular a média do tempo de serviço por cidade +tempo_medio_servico = df.groupby('City')['ExperienceInCurrentDomain'].mean() + +# Exibir a média de tempo de serviço para cada cidade +for cidade, media in tempo_medio_servico.items(): + print(f'A média do tempo de serviço em {cidade} é de: {media:.1f} anos') + +## - Faça a porcentagem de quantos empregados ainda trabalham na empresa (use a coluna `LeaveOrNot` do dataframe): + + +# Considerando +# 0 = O empregado ainda trabalha na empresa. +# 1 = O empregado deixou a empresa. + +# Total de empregados +total_empregados = df['LeaveOrNot'].count() + +# Total de empregados que ainda trabalham na empresa (LeaveOrNot == 0) +empregados_ativos = df[df['LeaveOrNot'] == 0].count()['LeaveOrNot'] + +# Cálculo da porcentagem de empregados ativos +porcentagem_ativos = (empregados_ativos / total_empregados) * 100 + +# Exibir os resultados +print(f'Total de empregados na base de dados: {total_empregados}') +print(f'Total de empregados ativos na empresa: {empregados_ativos}') +print(f'A porcentagem de empregados que ainda trabalham na empresa é: {porcentagem_ativos:.2f}%') + +## - Conte quantos empregados existem por `PaymentTier`: + + +# Filtrar os dados onde 'LeaveOrNot' == 0 +empregados_ativos = df[df['LeaveOrNot'] == 0] + +# Contar quantos empregados existem por 'PaymentTier' entre os que ainda trabalham na empresa +total_filtrado = empregados_ativos['PaymentTier'].value_counts() + +# Visualizar o resultado da contagem por 'PaymentTier' +print(total_filtrado) + +## - Substitua os valores da coluna `EverBenched` para `True` ou `False`: + + +# Substituir valores da coluna 'EverBenched' para 'True' ou 'False' +df['EverBenched'] = df['EverBenched'].replace({'Yes': True, 'No': False}) + +# Verificar a substituição +print(df[['EverBenched']].head()) + +# Verificar df depois da alteracao +print(df.head()) + +## - Crie um gráfico de pizza com o resultado da coluna `EverBenched` e outro com `LeaveOrNot`: + +# Gráfico de pizza para a coluna 'EverBenched' +total_ever_benched = df['EverBenched'].value_counts() +plt.figure(figsize=(12, 6)) + +plt.subplot(1, 2, 1) # 1 linha, 2 colunas, gráfico 1. Ultilizado para juntar os graficos em uma unica tela. +plt.pie(total_ever_benched, labels=total_ever_benched.index, autopct='%1.1f%%') #autopct = define como as %% seram exibidas no grafico. +plt.title('Distribuição de Empregados Disponiveis Para Projetos') + +# Gráfico de pizza para a coluna 'LeaveOrNot' +total_leave_or_not = df['LeaveOrNot'].value_counts() +plt.subplot(1, 2, 2) # 1 linha, 2 colunas, gráfico 2. Ultilizado para juntar os graficos em uma unica tela. +labels = ['Sim' if index == 0 else 'Não' for index in total_leave_or_not.index] +plt.pie(total_leave_or_not, labels=labels, autopct='%1.1f%%') #autopct = define como as %% seram exibidas no grafico. +plt.title('Distribuição de Empregados Ativos') + +# Ajustar layout e exibir +plt.tight_layout() +plt.show() + +# Salvar o grafico +plt.savefig('grafico_pizza.png') ##para salvar automaticamente o grafico \ No newline at end of file diff --git a/Carolyne-Santos/para-casa/grafico_barras1.png b/Carolyne-Santos/para-casa/grafico_barras1.png new file mode 100644 index 0000000..0f5e531 Binary files /dev/null and b/Carolyne-Santos/para-casa/grafico_barras1.png differ diff --git a/Carolyne-Santos/para-casa/grafico_barras2.png b/Carolyne-Santos/para-casa/grafico_barras2.png new file mode 100644 index 0000000..50f7eae Binary files /dev/null and b/Carolyne-Santos/para-casa/grafico_barras2.png differ diff --git a/Carolyne-Santos/para-casa/grafico_pizza.png b/Carolyne-Santos/para-casa/grafico_pizza.png new file mode 100644 index 0000000..0afc9d4 Binary files /dev/null and b/Carolyne-Santos/para-casa/grafico_pizza.png differ diff --git a/Carolyne-Santos/para-sala/Grafico_Barras.png b/Carolyne-Santos/para-sala/Grafico_Barras.png new file mode 100644 index 0000000..8907dd0 Binary files /dev/null and b/Carolyne-Santos/para-sala/Grafico_Barras.png differ diff --git a/Carolyne-Santos/para-sala/aula.py b/Carolyne-Santos/para-sala/aula.py new file mode 100644 index 0000000..a8cd12c --- /dev/null +++ b/Carolyne-Santos/para-sala/aula.py @@ -0,0 +1,106 @@ +#Biblioteca +import pandas as pd +import matplotlib.pyplot as plt + +#Ler arquivo csv (r)=rowdata +df = pd.read_csv(r"C:/Users/carol/OneDrive/Área de Trabalho/Reprograma/on33-python-s12-pandas-numpy-II/material/desenvolvimento_paises.csv") + +#Visualizar meu df +print(df.describe()) ##retornar informacoes descritivas do dataframe +print(df.info()) ##Retorna as informacoes de valores nulos por coluna e o dtype + +#Visualizar repetidos +print(df["AveragScore"].value_counts()) ##informar se ha valores repetidos, ou a quantidade de valores que existem de um determinado intervalo + +#Limpeza dos dados +#preencher os valores nulos com zero +print(df.fillna(0, inplace=True)) +#retorna todos os valores nulos das colunas do df +print(df.isnull().sum()) +#retorna todos os valores duplicados nas colunas do df +print(df.duplicated().sum()) +#Exclui os valores duplicados +print(df.drop_duplicates(inplace=True)) +#Verifica do df apos a exclusao dos dados duplicados +print(df.duplicated().sum()) + +#criei um variavel para identificar o pais mais seguro conforme coluna 'SafetySecurity' +pais_maior_security_value = df["SafetySecurity"].max() +#criei um variavel para identificar o pais menos seguro conforme coluna 'SafetySecurity' +pais_menor_security_value = df["SafetySecurity"].min() + +#retorna o valor da variavel criada acima +print(pais_maior_security_value) +print(pais_menor_security_value) +#retorna a diferenca entre o pais mais seguro e o menos seguro +print("A diferença entre o maior pais com SafetySecurity é de:",pais_maior_security_value - pais_menor_security_value) + + +#Encontra mais de uma linha onde o valor máximo esteja presente +linha_maior_valor_security = df[df["SafetySecurity"]== pais_maior_security_value] +print(linha_maior_valor_security) + + +#retorna o index do primeiro valor máximo encontrado +index_greater_value = df["SafetySecurity"].idxmax() +#Retorna dados da linha por index +print(df.loc[index_greater_value]) + +#Funcao para criar uma lista com todas as colunas do nosso df +columns_name = df.columns +print(columns_name) + +#Chamei a funcao e utilizei 'drop' para excluir a coluna 'Country' +columns_name = columns_name.drop(labels="Country") +print(columns_name) + +#Nova coluna para calculo da media de todas as colunas apos a exclusao da coluna 'Country' +df["Média"] = df[columns_name].mean(axis=1) + +#funcao que categoriza as medias calculadas acima. +def categorizar_valores(valor): + if valor > 80: + return "Desenvolvido" + if valor < 70 and valor >= 50: + return "Em Desenvolvimento" + if valor < 60: + return "Subdesenvolvido" + else: + return "Não Categorizado" + +# Nova coluna que guarda a resposta da funcao 'categorizar_valores' +df["Categoria Desenvolvimento"] = df["Média"].apply(categorizar_valores) ## posso usar tbm (lambda), para executar a funcao assim que ela for definida. +#Verificar coluna +#print(df["Categoria Desenvolvimento"]) + +#Funcao que retorna a quantidade de categorias presente na coluna 'Categoria Desenvolvimento' +development_category_counts = df["Categoria Desenvolvimento"].value_counts() +#Verificar a funcao acima +print(development_category_counts) + +#Grafico de barras com as quantidade de pais por categoria +development_category_counts.plot(kind="bar", title="QTD Países por Categoria") + +#development_category_counts.plot(kind="pie", title="QTD Países por Categoria") ## grafico de pizza +#development_category_counts.plot(kind="barh", title="QTD Países por Categoria") ## grafico de barras na horizontal +#development_category_counts.plot(kind="line", title="QTD Países por Categoria") ## grafico de linha +# plt.xlabel('Categorias') ##titulos do eixo x +# plt.ylabel('Quantidade') ##titulos do eixo y +# plt.xticks('rotation=0') ##titulos do eixo vao ter rotacao = a 0 + +#Mostrar o grafico +plt.show() +#plt.savefig('grafico.png') ##para salvar automaticamente o grafico + +#Filtre os dados onde o 'PersonelFreedom' seja inferior a 30. Se existir +personel_freedom_filter = df.where((df["PersonelFreedom"] <= 30.0) & (df["Categoria Desenvolvimento"]== "Subdesenvolvido")) + +#Excluir nulos ou NAN para retornar um df somente com o filtro que eu apliquei, ou seja menor que 30.0. +personel_freedom_filter.dropna(inplace=True) + +#Visualizar a df com a funcao filtro aplicada +print(personel_freedom_filter.info()) + +#ordenar meu df por duas colunas "Education", "Health" +print(df.sort_values(by=["Education", "Health"], inplace=True, ascending=False)) ##Ordenando meu df do maior ao menor das colunas selecionadas +print(df.head())