Boa tarde Estagiario, tudo bem?

Me explica melhor sobre a biblioteca que você pede ajuda no final...

Seria extração mesmo ou limpeza dos json?

Tem como dar um flatten no json, conforme aqui: https://www.tutorialspoint.com/flattening-json-objects-in-python

Sugiro também sempre usar get quando estiver usando dicionários, porque evita erros caso o elemento não exista.

Uma sugestão legal de análise seria análise de outlier para esses dados.

Não estou familiarizado com as bibliotecas ou ferramentas que podem facilitar a vida de um analista de dados, por isso estou pedindo ajuda para encontrar algo que possa me auxiliar na extração dos dados. Os dados estão em formato bruto, no formato de log de eventos assim:

11/17 21:13:58.323  SPELL_AURA_APPLIED,Player-1425-07B0EE09,"Cloverzan-Drakkari",0x548,0x0,Player-1425-07B0EE09,"Cloverzan-Drakkari",0x548,0x0,154797,"Touch of Elune - Night",0x1,BUFF
11/17 21:13:58.323  SPELL_AURA_APPLIED,Player-1425-07B0EE09,"Cloverzan-Drakkari",0x548,0x0,Player-1425-07B0EE09,"Cloverzan-Drakkari",0x548,0x0,340546,"Tireless Pursuit",0x8,BUFF
11/17 21:13:58.323  SPELL_AURA_APPLIED,Player-1425-07B0EE09,"Cloverzan-Drakkari",0x548,0x0,Player-1425-07B0EE09,"Cloverzan-Drakkari",0x548,0x0,5487,"Bear Form",0x1,BUFF

E meu script o transforma em JSON, assim (isso abaixo é só uma linha convertida😅):

{
        "timestamp": 1700266438.253,
        "event": "SPELL_PERIODIC_DAMAGE",
        "sourceGUID": "Player-3684-0DEBA294",
        "sourceName": "Rawdogger-Mal'Ganis",
        "sourceFlags": [
            "AFFILIATION_OUTSIDER",
            "AFFILIATION_MASK",
            "REACTION_HOSTILE",
            "REACTION_MASK",
            "CONTROL_PLAYER",
            "CONTROL_MASK",
            "TYPE_PLAYER",
            "TYPE_MASK"
        ],
        "sourceRaidFlags": [],
        "destGUID": "Player-1171-0A9765E1",
        "destName": "Zuberion-WyrmrestAccord",
        "destFlags": [
            "AFFILIATION_PARTY",
            "AFFILIATION_MASK",
            "REACTION_FRIENDLY",
            "REACTION_MASK",
            "CONTROL_PLAYER",
            "CONTROL_MASK",
            "TYPE_PLAYER",
            "TYPE_MASK"
        ],
        "destRaidFlags": [
            "AFFILIATION_PARTY",
            "AFFILIATION_MASK"
        ],
        "spellId": "391191",
        "spellName": "Burning Wound",
        "spellSchool": [
            "Fire",
            "Nature",
            "Frost",
            "Shadow",
            "Arcane"
        ],
        "amount": 0,
        "overkill": "9020",
        "school": [
            "Frost"
        ],
        "resisted": 0,
        "blocked": 1292.99,
        "absorbed": 1677.99,
        "critical": true,
        "glancing": true,
        "crushing": true
    }

`Estagiario`, Como você está iniciando, eu sugeriria você colocar em um DataFrame de polars (ou pandas que seria mais fácil pra quem está iniciando) e depois você vai explorar os dados. Minha sugestão é que por enquanto você tire campos que sejam listas e foque nos que facilitam criar o dataframe. Depois pode pegar uma biblioteca de exploração como o PandasProfiling, por exemplo (mas aí o dataset tem que ser em Pandas) ou o PyGWalker.
Desde o início, tenho me concentrado exatamente nisso. No entanto, como vou transformá-lo em um dataframe se os dados não estão estruturados? O arquivo de log é bastante complexo, como eu exemplifiquei. É como se fosse um diário que registra tudo o que acontece no jogo World of Warcraft. Ele nos diz quem fez o quê, quando e onde no jogo. Por exemplo, se um personagem chamado "Kizradath" lançou um feitiço chamado "Arena Preparation", o log registra isso, mas de uma forma muito bagunçada, como se todas as informações estivessem misturadas. Portanto, minha primeira tarefa é separar e organizar esses registros para que possamos entender melhor o que está acontecendo e, só então, conseguiremos criar um dataframe.
Então Estagiario, Você tem um script que transforma em JSON, aí você tem dados semi-estruturados, tira o que está retornando dicionários e listas, aí você vai ter uma linha de um dataframe. Talvez você diga que vai perder informações importantes, mas você está começando o seu projeto, tire do papel primeiro. Quando você deixar o seu JSON como um dicionário normal, uma key para um valor, você pode transformar essa linha com pd.from_dict.
Esse script que transforma em JSON tô nele ainda, mas não está rolando para todos os logs, e o código não está lá essas coisas. Ainda dá erro quando tento converter alguns logs, então estou lidando com esses problemas. Quanto ao que você mencionou, por exemplo, se eu quiser fazer um medidor de dano por partida até dá, porque já tenho os dados do dano. Mas aí fica complicado porque não vou entender totalmente esses dados, já que a parte do log que mostra os equipamentos do jogador está dando trabalho (ainda não tratados). Pensando bem, você tem uma certa razão, mas não tem jeito, vou ter que voltar nos dados para resolver isso em algum momento.
Essa geralmente é a parte mais importante da análise de dados, que é a limpeza de dados... É trabalhosa, mas é essencial e recompensa. Você não ter todos os dados não é um problema, o problema é você fazer uma primeira entrega. Faça essa primeira entrega como se não tivesse os dados completos, isso vai te motivar a seguir e depois você, com paciência, vai lidando com os outros dados que são mais complexos.
Eu estou nessa parte há muito tempo, mas do que deveria, kkkkk uns 2 meses, vou tentar rodar os dados como ele estão, lembrando que só testo o script com um único log, vou fazer um "for" e rodar em todos os 2000 arquivos e rezar para n dar erro, kkkkkkk...