From 9866c9d04e3c3602cc174e13a4b1f17bdb292569 Mon Sep 17 00:00:00 2001 From: ClaireBP Date: Fri, 23 Aug 2024 20:43:28 -0300 Subject: [PATCH 1/2] ExercicoS012 --- exercicios/para-casa/Claire.py | 90 ++++++++++++++++++++++++++++++++++ exercicios/para-sala/aula.py | 77 +++++++++++++++++++++++++++++ 2 files changed, 167 insertions(+) create mode 100644 exercicios/para-casa/Claire.py diff --git a/exercicios/para-casa/Claire.py b/exercicios/para-casa/Claire.py new file mode 100644 index 0000000..57b8d33 --- /dev/null +++ b/exercicios/para-casa/Claire.py @@ -0,0 +1,90 @@ +import pandas as pd +import matplotlib.pyplot as plt +from datetime import datetime + +df = pd.read_csv(r'C:\git-on33\on33-python-s10-pandas-numpy-II\material\Employee.csv') + +# print(df.describe()) +# print(df.info()) + +# print(df.isnull().sum()) +# print(df.duplicated().sum()) +# print(df.drop_duplicates(inplace=True)) +# print(df.duplicated().sum()) + + +#Crie um dataframe que tenha os empregados que trabalham na empresa a mais de 5 anos. +# funcionário com mais de 5 anos +# Converter 'JoiningYear' para uma data completa assumindo 1º de janeiro + +df["JoiningYear"] = pd.to_datetime(df["JoiningYear"].astype(str) + "-01-01") + +# # Calculando o tempo de serviço em anos +hoje = datetime.now() + +# dt.days extrai o número tota de dias da diferença calculada +df['YearsOfService'] = (hoje - df['JoiningYear']).dt.days / 365 + +# # Criando um DataFrame com empregados que trabalham há mais de 5 anos +employees_more_than_5_years = df[df['YearsOfService'] > 5] + +print(employees_more_than_5_years) + +# print(df.info()) + +#Agrupe os empregados por gênero e idade e crie um gráfico para cada caso. +# size agrupa os dados por gênero e conta o número de ocorrências para cada gênero/age. +age_group = df.groupby('Age').size() +print(age_group) +age_group.plot(kind="bar", title="QTD idade") + +plt.show() + +gender_group = df.groupby('Gender').size() +print(gender_group) +gender_group.plot(kind="bar", title="QTD de Genero") + +plt.show() + + +# #Veja qual a cidade que mais tem empregados e faça uma média do tempo de serviço dos empregados por cidade +city_counts = df['City'].value_counts() +most_employees_city = city_counts.idxmax() +print(f'A cidade com o maior número de empregados é: {most_employees_city}') +print(city_counts) + + # Calculando a média do tempo de serviço dos empregados por cidade +average_service_by_city = df.groupby('City')['JoiningYear'].mean() +print("Média do tempo de serviço por cidade:") +print(average_service_by_city) + +#Faça a porcentagem de quantos empregados ainda trabalham na empresa (use a coluna LeaveOrNot do dataframe) + +total_employees = len(df) +still_employed_count = df[df['LeaveOrNot'] == 0].shape[0] +print(still_employed_count) + +percentage_still_employed = (still_employed_count / total_employees) * 100 +print(f'Porcentagem de empregados que ainda trabalham: {percentage_still_employed:.2f}%') + +#Conte quantos empregados existem por PaymentTier + +QTd_pay = df.groupby('PaymentTier').size() +print(QTd_pay) + +#Substitua os valores da coluna EverBenched para True ou False +df['EverBenched'] = df['EverBenched'].replace({'Yes': True, 'No': False}) +print(df['EverBenched']) + +#Crie um gráfico de pizza com o resultado da coluna EverBenched e outro com LeaveOrNot + +ever = df.groupby('EverBenched').size() +print(ever) +ever.plot(kind="pie", title="Yes/No", autopct="%1.0f") +plt.show() + +stay_out = df.groupby('LeaveOrNot').size() +print(stay_out) +stay_out.plot(kind="pie",title="Stay/Out",autopct="%1.0f") +plt.show() + diff --git a/exercicios/para-sala/aula.py b/exercicios/para-sala/aula.py index e69de29..87ee006 100644 --- a/exercicios/para-sala/aula.py +++ b/exercicios/para-sala/aula.py @@ -0,0 +1,77 @@ +import pandas as pd +import matplotlib.pyplot as plt + +df = pd.read_csv(r"C:\git-on33\on33-python-s10-pandas-numpy-II\material\desenvolvimento_paises.csv") + +# print(df.describe()) +# print(df.info()) # traz informação de valores nao nulos por colunas e o tipo das colunas +# print(df["AveragScore"].value_counts()) # não aplicar em todo o dataframe e sim em uma coluna. Ele vai contar as linhas com valores iguais ex: tem duas linhas com valores 2 então 2.2 + +# print(df.isnull().sum()) # somar linhas nulas em cada colunas e mostrar +# df_sem_valores_nulos = df.fillna(0) # se usar o fillna sem inplace para salvar no dataframe novo para eu manipular +# print(df.fillna(value=0, inplace=True)) # inplace=true para modificar no dataframe para "0" +# print(df.isnull().sum()) +# print(df.duplicated().sum()) # identificar linhas duplicadas para apagar +# print(df.drop_duplicates(inplace=True)) # inplace=true para modificar no dataframe original que eu chamei a função para "0" +# print(df.duplicated().sum()) + +# country_max_security_value = df["SafetySecurity"].max() +# # country_min_security_value = df["SafetySecurity"].min() +# print(country_max_security_value) +# # print(country_min_security_value) +# # print("A diferença entre o maior pais com SafetySecurity é de:",country_max_security_value - country_min_security_value) + +# # # Encontra mais de uma linha onde o valor máximo esteja presente +# linha_maior_valor_security = df[df["SafetySecurity"] == country_max_security_value] +# print(linha_maior_valor_security) + +# # # retornar o index do primeiro valor máximo encontrado +# index_greater_value = df["SafetySecurity"].idxmax() + +# # retornar dados da linha por index +# print(df.loc[index_greater_value]) + +# excluir valores de uma lista/dimensão +columns_name = df.columns +columns_name = columns_name.drop( labels="Country") +print(columns_name) +df["Media"] = df[columns_name].mean(axis=1) # axis=1 aplicar em apenas uma linha/dimensão + +print(df["Media"]) +print(df.info()) + +def categorizar_valores(valor): + if valor > 80: + return "Desenvolvido" + if valor < 70 and valor >=50: + return "Em Desenvolvimento" + if valor < 60 : + return "Subdenvolvido" + else: + return "Não Categorizado" + +df["Categoria_Desenvolvimento"] = df["Media"].apply(categorizar_valores) # apply usar a def para categorizar a nova coluna criada + +development_category_counts = df["Categoria_Desenvolvimento"].value_counts() + +print(development_category_counts) + +development_category_counts.plot(kind="bar", title="QTD Países por Categoria") # plotar o gráfico nesse caso +# vamos usar pensa o tipo e o título + +# plt.show() # mostrar gráfico + +# filtre os dados onde o PersoneFreedom seja inferior a 30, se exister. +personel_freedom_filter = df.where(df["PersonelFreedom"] <= 30) + +# mais de um filtro +# personel_freedom_filter = df.where((df["PersonelFreedom"] <= 30) & (df["Categoria_Desenvolvimento"] =="Desenvolvido")) + +# apagar os na e deixar só com os filtro inferior a 30 que seja verdadeiro +personel_freedom_filter.dropna(inplace=True) + +print(personel_freedom_filter.info()) + +# ordenação por colunas +print(df.sort_values(by=["Education", "Health"], inplace=True, ascending=True)) +print(df.head()) From 9469cd1028af7185f9e57f439a05889731b6f455 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cla=C3=ADre?= <110730551+ClaireBP@users.noreply.github.com> Date: Fri, 23 Aug 2024 20:51:15 -0300 Subject: [PATCH 2/2] Delete exercicios/para-sala/aula.py --- exercicios/para-sala/aula.py | 77 ------------------------------------ 1 file changed, 77 deletions(-) delete mode 100644 exercicios/para-sala/aula.py diff --git a/exercicios/para-sala/aula.py b/exercicios/para-sala/aula.py deleted file mode 100644 index 87ee006..0000000 --- a/exercicios/para-sala/aula.py +++ /dev/null @@ -1,77 +0,0 @@ -import pandas as pd -import matplotlib.pyplot as plt - -df = pd.read_csv(r"C:\git-on33\on33-python-s10-pandas-numpy-II\material\desenvolvimento_paises.csv") - -# print(df.describe()) -# print(df.info()) # traz informação de valores nao nulos por colunas e o tipo das colunas -# print(df["AveragScore"].value_counts()) # não aplicar em todo o dataframe e sim em uma coluna. Ele vai contar as linhas com valores iguais ex: tem duas linhas com valores 2 então 2.2 - -# print(df.isnull().sum()) # somar linhas nulas em cada colunas e mostrar -# df_sem_valores_nulos = df.fillna(0) # se usar o fillna sem inplace para salvar no dataframe novo para eu manipular -# print(df.fillna(value=0, inplace=True)) # inplace=true para modificar no dataframe para "0" -# print(df.isnull().sum()) -# print(df.duplicated().sum()) # identificar linhas duplicadas para apagar -# print(df.drop_duplicates(inplace=True)) # inplace=true para modificar no dataframe original que eu chamei a função para "0" -# print(df.duplicated().sum()) - -# country_max_security_value = df["SafetySecurity"].max() -# # country_min_security_value = df["SafetySecurity"].min() -# print(country_max_security_value) -# # print(country_min_security_value) -# # print("A diferença entre o maior pais com SafetySecurity é de:",country_max_security_value - country_min_security_value) - -# # # Encontra mais de uma linha onde o valor máximo esteja presente -# linha_maior_valor_security = df[df["SafetySecurity"] == country_max_security_value] -# print(linha_maior_valor_security) - -# # # retornar o index do primeiro valor máximo encontrado -# index_greater_value = df["SafetySecurity"].idxmax() - -# # retornar dados da linha por index -# print(df.loc[index_greater_value]) - -# excluir valores de uma lista/dimensão -columns_name = df.columns -columns_name = columns_name.drop( labels="Country") -print(columns_name) -df["Media"] = df[columns_name].mean(axis=1) # axis=1 aplicar em apenas uma linha/dimensão - -print(df["Media"]) -print(df.info()) - -def categorizar_valores(valor): - if valor > 80: - return "Desenvolvido" - if valor < 70 and valor >=50: - return "Em Desenvolvimento" - if valor < 60 : - return "Subdenvolvido" - else: - return "Não Categorizado" - -df["Categoria_Desenvolvimento"] = df["Media"].apply(categorizar_valores) # apply usar a def para categorizar a nova coluna criada - -development_category_counts = df["Categoria_Desenvolvimento"].value_counts() - -print(development_category_counts) - -development_category_counts.plot(kind="bar", title="QTD Países por Categoria") # plotar o gráfico nesse caso -# vamos usar pensa o tipo e o título - -# plt.show() # mostrar gráfico - -# filtre os dados onde o PersoneFreedom seja inferior a 30, se exister. -personel_freedom_filter = df.where(df["PersonelFreedom"] <= 30) - -# mais de um filtro -# personel_freedom_filter = df.where((df["PersonelFreedom"] <= 30) & (df["Categoria_Desenvolvimento"] =="Desenvolvido")) - -# apagar os na e deixar só com os filtro inferior a 30 que seja verdadeiro -personel_freedom_filter.dropna(inplace=True) - -print(personel_freedom_filter.info()) - -# ordenação por colunas -print(df.sort_values(by=["Education", "Health"], inplace=True, ascending=True)) -print(df.head())