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.")