1
resposta

[Projeto] desafio: DataFrame, expandindo as colunas address e company em suas subcolunas, visualização e a análise dos dados

1. Carregar dados:
import pandas as pd

df = pd.read_json("/mnt/data/users.json")
df.head()
2. Expandir colunaaddress

df_address = pd.json_normalize(df["address"])

cria colunas:
rua
suíte
cidade
CEP
geo.lat
geo.lng

3. Expandir colunacompany
df_company = pd.json_normalize(df["company"])

Cria:
nome
Slogan
besteira

4. Juntar tudo
df_final = pd.concat(
    [df.drop(["address", "company"], axis=1), df_address, df_company],
    axis=1
)

df_final.head()

ANÁLISE DOS DADOS
1. Quantidade de usuários por cidade
df_final["city"].value_counts()
2. Empresas mais comuns
df_final["name"].value_counts()
3. Distribuição por domínio (site)
df_final["website"].str.split(".").str[-1].value_counts()

VISUALIZAÇÃO
df_final["city"].value_counts().plot(kind="barh")

codigo fonte:import pandas as pd
import matplotlib.pyplot as plt

# =========================
# 1. Leitura do arquivo JSON
# =========================
df = pd.read_json("/mnt/data/users.json")

print("DataFrame original:")
print(df.head())
print("\nColunas originais:")
print(df.columns)

# =========================
# 2. Normalização da coluna address
# =========================
df_address = pd.json_normalize(df["address"])

# Renomeando colunas para evitar ambiguidade
df_address = df_address.rename(columns={
    "street": "address_street",
    "suite": "address_suite",
    "city": "address_city",
    "zipcode": "address_zipcode",
    "geo.lat": "address_geo_lat",
    "geo.lng": "address_geo_lng"
})

# =========================
# 3. Normalização da coluna company
# =========================
df_company = pd.json_normalize(df["company"])

# Renomeando colunas para evitar conflito com a coluna "name" do usuário
df_company = df_company.rename(columns={
    "name": "company_name",
    "catchPhrase": "company_catchPhrase",
    "bs": "company_bs"
})

# =========================
# 4. União dos DataFrames
# =========================
df_final = pd.concat(
    [df.drop(columns=["address", "company"]), df_address, df_company],
    axis=1
)

print("\nDataFrame final normalizado:")
print(df_final.head())

print("\nInformações do DataFrame final:")
print(df_final.info())

# =========================
# 5. Análises básicas
# =========================

# Quantidade de usuários por cidade
usuarios_por_cidade = df_final["address_city"].value_counts()
print("\nQuantidade de usuários por cidade:")
print(usuarios_por_cidade)

# Quantidade de usuários por empresa
usuarios_por_empresa = df_final["company_name"].value_counts()
print("\nQuantidade de usuários por empresa:")
print(usuarios_por_empresa)

# Domínios dos sites
df_final["website_domain"] = df_final["website"].str.split(".").str[-1]
dominios = df_final["website_domain"].value_counts()
print("\nDomínios dos websites:")
print(dominios)

# =========================
# 6. Visualizações
# =========================

# Gráfico 1: usuários por cidade
plt.figure(figsize=(10, 6))
usuarios_por_cidade.plot(kind="barh")
plt.title("Quantidade de usuários por cidade")
plt.xlabel("Quantidade")
plt.ylabel("Cidade")
plt.tight_layout()
plt.show()

# Gráfico 2: usuários por empresa
plt.figure(figsize=(10, 6))
usuarios_por_empresa.plot(kind="barh")
plt.title("Quantidade de usuários por empresa")
plt.xlabel("Quantidade")
plt.ylabel("Empresa")
plt.tight_layout()
plt.show()

# Gráfico 3: domínios dos websites
plt.figure(figsize=(8, 5))
dominios.plot(kind="bar")
plt.title("Distribuição dos domínios dos websites")
plt.xlabel("Domínio")
plt.ylabel("Quantidade")
plt.tight_layout()
plt.show()

# =========================
# 7. Salvando o resultado final
# =========================
df_final.to_csv("usuarios_normalizados.csv", index=False)

print("\nArquivo 'usuarios_normalizados.csv' salvo com sucesso.")
1 resposta

Oi, Moacir! Como vai?

Agradeço por compartilhar.

Gostei da sua abordagem no desafio, principalmente na forma como você organizou a normalização dos dados e cuidou dos conflitos de nomes com o uso de rename, isso mostra uma boa atenção aos detalhes. A parte de análise e visualização também ficou bem estruturada, facilitando o entendimento dos dados.

Siga explorando esse tipo de transformação, você está no caminho certo.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!