📊⚔️[Dúvida] Como Transformei Minha Paixão por World of Warcraft em um Projeto de Análise de Dados!"🎮🔍
Olá, TapNews!
Desde que descobri uma paixão por dados e pelo jogo World of Warcraft, sempre busquei formas de combinar esses mundos. Jogando WoW por bastante tempo, decidi enfrentar o desafio de converter logs brutos de combate em um banco de dados estruturado. Dediquei dois meses nesse projeto e, com 8.15GB de logs '.txt', conto com mais de 2000 registros de combates em arenas para análise. Meu aprendizado sobre os logs vieram de fontes como o wowpedia e outros repositórios relacionados ao WoW.
Contexto
Os logs de eventos de combate são repletos de informações, mas também são complexamente codificados. A título de ilustração, compartilho uma linha de log:
4/3 22:13:15.456 SPELL_DAMAGE,Player-7852-0B30BA11,"Flex-Ragnaros",0x548,0x0,
Creature-0-3698-7854-95214-235743-0000369825F,"Earthen Wall Totem",0x2148,0x0,
201657,"Earthen Wall",0x8,0000000000000000,0000000000000000,0,0,0,0,0,0,
-1,0,0,0,0.00,0.00,0,0.0000,0,152,152,-1,8,0,0,0,nil,nil,nil"
E também um trecho do arquivo JSON deste projeto:
{
"timestamp": 1870266654.159,
"event": "COMBATANT_INFO",
"playerguid": "Player-6587-0DEBA182",
"faction": 1,
"character_stats": {
"strength": 371,
"agility": 1772,
"stamina": 314,
"intelligence": 316,
"dodge": 0,
"parry": 0,
"block": 0,
"critMelee": 531,
"critRanged": 531,
"critSpell": 533,
"speed": 0,
"lifesteal": 0,
"hasteMelee": 332,
"hasteRanged": 312,
"hasteSpell": 332,
"avoidance": 0,
"mastery": 533,
"versatilityDamageDone": 789,
"versatilityHealingDone": 789,
"versatilityDamageTaken": 789,
"armor": 790
},
Cada registro é singular e pode variar em quantidade de elementos, dependendo do evento e das flags presentes, tornando o projeto ainda mais desafiador.
Tecnologias e Abordagem
Para processar esses dados brutos, recorri ao Python, e pelo potencial analítico e versatilidade, escolhi o armazenamento em formato JSON.
Detalhando a Abordagem Técnica
Aprofundando um pouco mais na mecânica do que estou desenvolvendo, o cerne deste projeto é um script de conversão que já ultrapassa as 1300 linhas. Embora tenha buscado inspiração em vários repositórios no GitHub - alguns até datando de uma década atrás - o meu trabalho não se limitou a apenas copiar e colar. A tecnologia evoluiu, e muitas das informações que encontrei foram adaptadas e melhoradas para atender às necessidades atuais. Um bom exemplo disso é o evento "COMBATANT_INFO", que não existia há 10 anos. Para incorporá-lo, precisei investir tempo em pesquisa e inúmeros testes.
Recentemente, finalizei a construção de todas as funções que acredito serem essenciais para o projeto. Ainda que não tenha implementado testes unitários, incorporei algumas verificações ao longo das funções para garantir a integridade dos dados. Com a vasta quantidade de informações já coletadas, não vejo necessidade de adquirir mais dados no momento. Em vez disso, minha prioridade é identificar e corrigir quaisquer falhas presentes no script. Dado o ritmo constante de atualizações do WoW, não planejo manter o script atualizado indefinidamente, especialmente considerando que provavelmente o utilizarei uma única vez.
Com a fase de coleta e estruturação dos dados quase concluída, estou ansiose para avançar para a próxima etapa assim que os potenciais problemas do script forem resolvidos.
Por Que Este Projeto?
A motivação para este projeto está enraizada no meu amor ao WoW e no interesse em explorar o mundo dos dados. Este projeto representa uma oportunidade de combinar paixão e crescimento profissional.
Direção Futura
Após a etapa de estruturação dos dados, pretendo me aprofundar em análises estatísticas. Planejo compartilhar este trabalho no LinkedIn e GitHub, enriquecendo meu portfólio.
Considerações Finais
Seria de grande valor se alguém pudesse indicar uma biblioteca específica para extração de dados, pois meu principal desafio tem sido usar Python puro e expressões regulares para alcançar esse objetivo. No mais, estou bastante contente com essa empreitada e gostaria de conhecer a opinião da comunidade. Feedbacks, sugestões ou comentários serão muito apreciados.
Gratidão pela atenção dispensada!