# -*- coding: utf-8 -*- """Tarefa3_combinatoria_CartolaFC .ipynb Automatically generated by Colaboratory. Original file is located at https://colab.research.google.com/drive/1XxWax75SqcN5M-GJjDG7urP395egMnMF """ # Tarefa 3 - Combinatória no CartolaFC # Quantas combinações eu posso ter para as situações abaixo: # # a - No CartolaFC eu quero montar um time com três atacantes no qual os atacantes Jô e Marinho não joguem um do lado do outro (3-4-3). PS. Jô e Marinho sempre serão escalados. # # b -No CartolaFC eu quero montar um time com cinco zagueiros no qual os zagueiros Cuesta e Gil não joguem um do lado do outro (5-4-1). Os laterais serão considerados como jogadores de zagueiro para esta tarefa. PS. Cuesta e Gil sempre serão escalados. # # * PS no filtro os laterais serão considerados todos como zagueiros, assim é possível ter um esquema tático com 5 zagueiros. import numpy as np import pandas as pd import matplotlib.pyplot as plt import scipy as sc import requests import json import math athletes = 'https://api.cartolafc.globo.com/atletas/mercado' response_cartola = requests.get(athletes) data_cartola = response_cartola.json() df_cartola1 = pd.DataFrame(data_cartola['atletas']) df_cartola1.head(3) #df = pd.DataFrame.from_dict(df_cartola1['scout']) df_scout = pd.DataFrame.from_records(df_cartola1['scout']) df_scout.head() #df2 = pd.DataFrame.from_dict(data=df) #df2 dfcatorlafull = pd.concat([df_cartola1.drop(labels=['scout'], axis=1), df_scout], axis=1) dfcatorlafull.head() dfcatorla_meinteressa = dfcatorlafull.drop(labels=['foto'], axis=1) dfcatorla_meinteressa.head() str(pd.to_datetime('today')) # Caso não queira salvar no drive comente as quatro linhas abaixo ou pule este comando # from google.colab import drive # drive.mount('/drive') # today = pd.to_datetime('today') # dfcatorla_meinteressa.to_csv('/drive/My Drive/Classroom/REF0007 - Noções de Estatística (2020)/cartolafc/rodada_'+str(dfcatorla_meinteressa['rodada_id'][0])+'_'+str(today)+'.csv') # dfcatorla_meinteressa.to_excel('/drive/My Drive/Classroom/REF0007 - Noções de Estatística (2020)/cartolafc/rodada_'+str(dfcatorla_meinteressa['rodada_id'][0])+'_'+str(today)+'.xlsx') dfcart = dfcatorla_meinteressa nomescol = list(dfcart.iloc[:,8:].columns) KOS = [] # King of Scouts for i in range(len(nomescol)): kings_idx = dfcart[nomescol[i]].sort_values(ascending=False, na_position='last').index kings = dfcart.loc[kings_idx,['slug','atleta_id',nomescol[i]]] KOS.append(kings) pd.DataFrame(nomescol).T # KOS # Para selecionar apenas os 10 maiores pontuadores rodada_num = dfcart['rodada_id'][0] print(f'The King of Points: round ==> {rodada_num}') KOPoints = KOS[0] KOPoints.head(10) print(f'The King of Price: round ==> {rodada_num}') KOPrice = KOS[1] KOPrice.head(10) print(f'The King of offside: round ==> {rodada_num}') KOOffside = KOS[12] KOOffside.head(10) print(f'The King of cartao amarelo: round ==> {rodada_num}') KOCartaoA = KOS[5] KOCartaoA.head(10) posicao_jo = dfcart['slug'] == 'jo' posicao_marinho = dfcart['slug'] == 'marinho' jo = dfcart[posicao_jo] marinho = dfcart[posicao_marinho] posicao_gil = dfcart['slug'] == 'gil' posicao_cuesta = dfcart['slug'] == 'victor-cuesta' gil = dfcart[posicao_gil] cuesta = dfcart[posicao_cuesta] print(jo, marinho, gil, cuesta) posicoes = data_cartola['posicoes'] posicoes atacantes_bool = dfcart['posicao_id'] == 5 atacantes = dfcart[atacantes_bool] natacantes = len(atacantes) print(f'O numero de atacantes na rodada {rodada_num} foi = {natacantes}') # a - No CartolaFC eu quero montar um time com três atacantes no qual os # atacantes Jô e Marinho não joguem um do lado do outro (3-4-3). # PS. Jô e Marinho sempre serão escalados. # Jo e Marinho A3 A4 A5 A6 n = natacantes k = 3 # numero de atacantes para escalar (vagas no ataque = 3) #1 Jo A3 Marinho #2 Jo A4 Marinho #3 Jo A5 Marinho #4 Jo A6 Marinho #... Jo A... Marinho #5 Marinho A3 Jo #6 Marinho A4 Jo #7 Marinho A5 Jo #8 Marinho A6 Jo #...Marinho A... Jo n_real = natacantes - 2 k_real = 1 n_jomarinho = 2 k_jomarinho = 2 C_nk = 2 * (natacantes-2) # ou C_nk = 2 * n_real print(f'A posicao de Jo e Marinho, na esquerda e direita IMPORTA {C_nk}') print(f'A posicao de Jo e Marinho, na esquerda e direita NAO IMPORTA {C_nk//2}') # Resposta direta # Permutacao de dois atacantes * uma combinacao de atacantes para uma posicao # 2 atacantes # Jo + Marinho math.factorial(2) * (math.factorial(natacantes-2) / math.factorial((natacantes-2)-1)) # b - No CartolaFC eu quero montar um time com cinco defensores no qual # os zagueiros Cuesta e Gil não joguem um do lado do outro (5-4-1). # Os laterais serão considerados como jogadores de defesa para esta tarefa. # PS. Cuesta e Gil sempre serão escalados. zagueiros_bool = dfcart['posicao_id'] == 3 zagueiros = dfcart[zagueiros_bool] nzagueiros = len(zagueiros) laterais_bool = dfcart['posicao_id'] == 2 laterais = dfcart[laterais_bool] nlaterais = len(laterais) ndefesa = nzagueiros + nlaterais print(f'O numero de zagueiros na rodada {rodada_num} foi = {nzagueiros}') print(f'O numero de laterais na rodada {rodada_num} foi = {nlaterais}') print(f'O numero de jogadores de defesa na rodada {rodada_num} foi = {ndefesa}') n = 4 k = 1 A_nk = math.factorial(n) / math.factorial(n-k) # Arranjo P(nk) = n! / (n-k)! A_nk # Gil e Cuesta D3 D4 D5 n = ndefesa k = 5 #1 Gil D3 Cuesta D4 D5 #2 Gil D3 D4 Cuesta D5 #3 Gil D3 D4 D5 Cuesta #4 Cuesta D3 Gil D4 D5 #5 Cuesta D3 D4 Gil D5 #6 Cuesta D3 D4 D5 Gil #7 D3 Gil D4 Cuesta D5 #8 D3 Gil D4 D5 Cuesta #9 D3 Cuesta D4 Gil D5 #10 D3 Cuesta D4 D5 Gil #11 D3 D4 Gil D5 Cuesta #12 D3 D4 Cuesta D5 Gil # ou seja 2 * 3 + 2 * 2 + 2 * 1 # ou seja 2 * math.factorial(3) 2 * 3 + 2 * 2 + 2 * 1 2 * math.factorial(3) # Gil e Cuesta D3 D4 D5 D6 D7 # Arranjo (a ordem importa SIM - Faz difenca a ordem) # A(n,k) = n! / (n-k)! # exemplo para n = 5 k = 3 P_nk = math.factorial(n) / math.factorial(n-k) P_nk # Gil e Cuesta D3 D4 D5 D6 D7 # Combinacao (a ordem NAO importa - NAO faz difenca a ordem) # C(n,k) = n! / ((n-k)! * k!) n = 5 k = 3 C_nk = math.factorial(n) / (math.factorial(n-k) * math.factorial(k)) C_nk # Fazendo direto seria assim COM UM NUMERO REDUZIDO PARA EXEMPLIFICAR # Gil e Cuesta D3 D4 D5 D6 D7 n1 = 7 # total de defensores k1 = 5 # vagas na defesa fixo = 2 # quantos sempre jogam n = n1 - fixo k = k1 - fixo (2 * math.factorial(k)) * (math.factorial(n) / math.factorial(n-k)) ndefesa # Fazendo direto seria assim # Gil e Cuesta D3 D4 D5 D6 D7 ... D236 n1 = ndefesa k1 = 5 fixo = 2 # Gil e Cuesta n = n1 - fixo k = k1 - fixo # 12 * (A(234,3) = 234! / (234-3)!) defesa_importa = (fixo * math.factorial(k1-fixo)) * (math.factorial(n) // math.factorial(n-k)) defesa_nimporta = (fixo * math.factorial(k1-fixo)) * (math.factorial(n) // (math.factorial(n-k) * math.factorial(k))) print(f'As possibilidades de Gil e Cuesta com cinco defensores onde a ordem IMPORTA eh: {defesa_importa}') print(f'As possibilidades de Gil e Cuesta com cinco defensores onde a ordem NAO IMPORTA eh: {defesa_nimporta}') print(f'As possibilidades de Gil e Cuesta com cinco defensores onde a ordem IMPORTA eh : {defesa_importa:.2e} (em notacao cientifica)') print(f'As possibilidades de Gil e Cuesta com cinco defensores onde a ordem NAO IMPORTA eh: {defesa_nimporta:.2e} (em notacao cientifica)')