diff --git a/exercicios/para-casa/atividade_casa_FlavienneMarins.py b/exercicios/para-casa/atividade_casa_FlavienneMarins.py new file mode 100644 index 0000000..d225535 --- /dev/null +++ b/exercicios/para-casa/atividade_casa_FlavienneMarins.py @@ -0,0 +1,75 @@ +import pandas as pd +import matplotlib.pyplot as plt +import datetime as dt + +#Carregando o dataframe +df = pd.read_csv(r"C:\Users\flavi_000\OneDrive\Flavienne\Cursos\Reprograma\S12 - 17.08\on33-python-s10-pandas-numpy-II\material\Employee.csv") + +print(df.describe()) # faz uma descrição matemát. dos dados, um resumo estatístico rápido de um DataFrame, media, desvio padrão, contagem de linhas em cada coluna + +# Atividade 1 - Faça a limpeza do seu dataframe excluindo linhas duplicadas ou preenchendo valores nulos. +print(df.isnull().sum()) # sem valores nulos, logo não há células vazias ou com valor ausentes. +print(df.duplicated().sum()) #imprimiu 1889 valores duplicados. +print(df.duplicated().value_counts()) # conferi a frequência dos duplicados(true 1889) e não duplicados (false 2764) +df.drop_duplicates(inplace=True) # remover as duplicadas no DF e as alterações serão permanentes no DF. +print(df.duplicated().value_counts()) #verificar se a remoção foi eficiente, resultado nulo não é exibido. + +# Atividade 2 - Crie um dataframe que tenha os empregados que trabalham na empresa a mais de 5 anos. +current_year = dt.datetime.now().year #armazena na variável a data atual (ano) +print(current_year) + +df["Years_of_Service"] = (df["JoiningYear"] - current_year) #DF criado que receberá o cálculo da quantidade de anos na empresa +print(df.info()) + +filtered_df = df[df["Years_of_Service"] > 5] #Filtro com os funcionários com mais de 5 anos +print(filtered_df.head()) + +# Atividade 3- Agrupe os empregados por gênero e idade e crie um gráfico para cada caso. + +df["Age"].value_counts().sort_index().plot(kind="barh", title="Idade dos Empregados", xlabel="Quantidade", ylabel="Idades", color="LightSlateGray") +#Calcula a frequência de cada idade na coluna "Age" do DF;ordenando em ordem crescente; +plt.show() + +df["Gender"].value_counts().plot(kind="pie", title="Gênero dos Empregados", colors=["DarkBlue" , "MediumVioletRed" ], autopct="%.2f%%") +# Calcula a frequência de cada gênero aparece na coluna "Gender" do DF e gera um gráfico +plt.ylabel("") #limpa os eixos x e y do gráfico de barras, pois solicitei um gráfico de pizza. +plt.legend() #adiciona uma legenda de cores no gráfico +plt.show() + +# Atividade 4 - Veja qual a cidade que mais tem empregados e faça uma média do tempo de serviço dos empregados por cidade + #Cidade que mais tem empregados +most_employees_city = df["City"].value_counts().idxmax() #conta quantos funcionários existem em cada cidade e pega o nome da cidade que aparece mais vezes. +print("A cidade com mais empregados é", most_employees_city) + + #Média do tempo de serviço dos empregados por cidade +df["years_of_service"] = current_year - df["JoiningYear"] #calcula a quantidade de anos de serviço para cada funcionário e armazenando o resultado em uma nova coluna chamada "years_of_service". +avg_time_service_by_city = df.groupby("City")["years_of_service"].mean() #calcula a média de anos de serviço para cada cidade. +print(f"\nMédia de tempo de serviço dos empregados por cidade \n{avg_time_service_by_city}") + +# Atividade 5 - Faça a porcentagem de quantos empregados ainda trabalham na empresa (use a coluna `LeaveOrNot` do dataframe) +total_employees = df["LeaveOrNot"].count() #conta o número de funcionários que deixaram e os que não deixaram a empresa, selecionando o maior número de cada. +still_working = df["LeaveOrNot"].value_counts().values[0] #número de funcionários que ainda estão trabalhando na empresa +percent_employees = still_working / total_employees * 100 #converte a proporção em uma porcentagem +print(f"\nA porcentagem de empregados que continuam trabalhando na empresa é de {percent_employees:.2f}%") + +# Atividade 6 - Conte quantos empregados existem por `PaymentTier` +employees_paymentTier = df["PaymentTier"].count() #conta quantos funcionários estão em cada nível de pagamento e seleciona o maior entre eles. +print(f"\nO número de empregados é de {employees_paymentTier}\n") + +# Atividade 7 - Substitua os valores da coluna `EverBenched` para `True` ou `False` +df["EverBenched"].replace({"Yes": True, "No": False}, inplace=True) #convertendo os valores +print(df["EverBenched"].head()) + +# Atividade 8 - Crie um gráfico de pizza com o resultado da coluna `EverBenched` e outro com `LeaveOrNot` +everbenched_counts = df["EverBenched"].value_counts() +leaveornot_counts = df["LeaveOrNot"].value_counts() + +##gráfico dos everbenched +labels = ["No", "Yes"] #labels é utilizado para melhorar o layout do gráfico. +everbenched_counts.plot(kind='pie', labels=labels, autopct='%1.1f%%', colors=['Gray', 'Indigo'], title='Funcionários Desligados da Empresa') +plt.show() + +##gráfico dos Leave or Not +labels = ["Funcionários Presentes na Empresa", "Funcionários Desligados da Empresa"] +leaveornot_counts.plot(kind='pie', labels=labels, autopct='%1.1f%%', colors=['Gray', 'Indigo'], title='Funcionários Presentes e Desligados da Empresa') +plt.show() \ No newline at end of file diff --git a/exercicios/para-sala/aula.py b/exercicios/para-sala/aula.py index e69de29..7705119 100644 --- a/exercicios/para-sala/aula.py +++ b/exercicios/para-sala/aula.py @@ -0,0 +1,69 @@ +import pandas as pd +import matplotlib.pyplot as plt + +df = pd.read_csv(r"C:\Users\flavi_000\OneDrive\Flavienne\Cursos\Reprograma\S12 - 17.08\on33-python-s10-pandas-numpy-II\material\desenvolvimento_paises.csv") + +# print(df.describe()) # faz uma descrição matemát. dos dados, um resumo estatístico rápido de um DataFrame, media, desvio padrão, contagem de linhas em cada coluna +# print(df.info()) #fornece um resumo rápido e conciso das principais características numéricas dos seus dados +# print(df["AveragScore"].value_counts()) #aplicado apenas em uma coluna, mostra quantas vezes cada valor aparece nos seus dados. + +# print(df.fillna(0, inplace=True))#o resultado deste dataframe será alterado no original +# print(df.isnull().sum()) #isnull() cria um DataFrame com a mesma forma que o original, mas com valores booleanos indicando onde há valores nulos.#sum() conta quantos valores True (nulos) há em cada coluna.usada para contar a quantidade de valores nulos (missing values) em cada coluna desse DataFrame +# print(df.duplicated().sum()) #calcula e retorna o número total de linhas duplicadas com true ou false presentes em um DataFrame. +# print(df.drop_duplicates(inplace=True))#deletar os valores duplicados +# print(df.duplicated().sum())#deletar os valores duplicados + +#Item 2:Encontre os pais que têm o maior e o menor valor para a coluna SafetySecuritye imprima a diferença entre eles. (alterar tudo p inglês depois) +# pais_maior_security_value = df["SafetySecurity"].max() +# pais_menor_security_value = df["SafetySecurity"].min() + +# print(pais_maior_security_value) +# print(pais_menor_security_value) +# print("A diferença entre o maior país 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_vaylor_security = df[df["SafetySecurity"] == pais_maior_security_value] #filtro, retorne as linhas desse dataframe +# print(linha_maior_vaylor_security) + +# #outra forma de fazer o item 2: +# #retorna o index do primeiro valor máximo encontrado +index_greater_value = df["SafetySecurity"].idxmax() +# #retorna dados da linha por index +# print(df.iloc[index_greater_value])# o loc encontra dados na linha que vc escolheu + +#Ativ 3: Use o apply() para criar uma coluna nova onde a média de todas as colunas - menos a Country- quando: Maior que 80 o valor seja "Desenvolvido", entre 50 e 70 seja "Em desenvolvimento" e menor que 60 seja "Subdesenvolvido" +# criar uma coluna nova +columns_name = df.columns + +print(columns_name) +columns_name = columns_name.drop(labels= "Country") #deletando a coluna Country + +df["Média"] = df[columns_name].mean(axis=1) #executa apenas na linha 1 + +def categorizar_valores(valor): + if valor > 80: + return "Desenvolvido" + if valor < 70 and valor >=50: + return "Em desenvolvimento" + if valor < 60: + return "Não Categorizado" + +df["Categoria Desenvolvimento"] = df["Média"].apply(categorizar_valores) +#print(df["Categoria Desenvolvimento"]) + +development_category_counts = df["Categoria Desenvolvimento"].value_counts() + +print(development_category_counts) + +development_category_counts.plot(kind="bar", title="QTD Países por Categoria") + +plt.show() +#Filtre os dados onde o PersonelFreedom seja inferior a 30. Se existir +personel_freedom_filter = df.where((df["PersonelFreedom"] <= 30) & (df["Categoria_Desenvolvimento"] == "Subdesenvolvido")) + +personel_freedom_filter.dropna(inplace=True) + +print(personel_freedom_filter.info()) + + +