<jupyter_start><jupyter_text>**CVM - Acesso dos dados da Comissão de Valores Mobiliários** **Importação de Pacotes**<jupyter_code>import pandas as pd
pd.set_option("display.max_colwidth", 150)
#pd.options.display.float_format = "{:.6f}".format
from pandas.tseries.offsets import BDay
from datetime import date
from google.colab import files<jupyter_output><empty_output><jupyter_text>**Funções para Coleta e Tratamento de dados de Fundos de Investimento fornecidos pela CVM**>*   Base de Dados: http://dados.cvm.gov.br/> Funções que buscam dados no site da CVM e retornam um DataFrame pandas site:<jupyter_code>def busca_cadastro_cvm(data=(date.today()-BDay(1))):
  if data is not busca_cadastro_cvm.__defaults__[0]:
    data = pd.to_datetime(data)
  
  try:
    url = 'http://dados.cvm.gov.br/dados/FI/CAD/DADOS/inf_cadastral_fi_{}{:02d}{:02d}.csv'.format(data.year, data.month, data.day)
    return pd.read_csv(url, sep=';', encoding='ISO-8859-1')

  except: 
    print("Arquivo {} não encontrado!".format(url))
    print("Forneça outra data!")
#def busca_cadastro_cvm(data=(date.today()-BDay(2))):
  if data is not busca_cadastro_cvm.__default__[0]:
    data = pd.to_datetime(data)

  try:
    url = "http://dados.cvm.gov.br/dados/FI/CAD/DADOS/inf_cadastral_fi_{}{:02d}{:02d}.csv".format(data.year, data.month, data.day)
    return pd.read_csv(url, sep=";", encoding="ISO-8859-1")
    
  except:
    print("Arquivo {} não encontrado!".format(url))
    print("Forneça outra data!")
  
def busca_informes_diarios_cvm_por_periodo(data_inicio, data_fim):
  datas = pd.date_range(data_inicio, data_fim, freq= "MS")
  informe_completo = pd.DataFrame()

  for data in datas:
    try:
      url = "http://dados.cvm.gov.br/dados/FI/DOC/INF_DIARIO/DADOS/inf_diario_fi_{}{:02d}.csv".format(data.year, data.month)
      informe_mensal = pd.read_csv(url, sep=";")

    except:
      print("Arquivo {} não encontrado!".format(url))

    informe_completo = pd.concat([informe_completo, informe_mensal], ignore_index=True)

  return informe_completo
def melhores_e_piores(informes, cadastro, top=5, minimo_de_cotistas=100, classe=""):
  cadastro      = cadastro[cadastro["SIT"] == 'EM FUNCIONAMENTO NORMAL']
  fundos        = informes[informes["NR-COTST"] >= minimo_de_cotistas]
  cnpj_informes = fundos["CNPJ_FUNDO"].DROP_DUPLICATES()<jupyter_output><empty_output><jupyter_text>Buscando Dados da CVM<jupyter_code>cadastro = busca_cadastro_cvm()
cadastro.head(2)
cadastro_cvm = busca_cadastro_cvm()
cadastro_cvm.to_excel("cadastro_cvm_2020-10-27.xlsx")
files.download("cadastro_cvm_2020-10-27.xlsx")
informes = busca_informes_diarios_cvm_por_periodo(data_inicio='2020-01', data_fim='2020-10')
informes

informes_diarios = busca_informes_cvm(2020,4)
informes_diarios
cadastro_cvm<jupyter_output><empty_output><jupyter_text>**Manipulando os dados da CVM** >Definindo filtros para os Fundos de Investimentos<jupyter_code>minimo_cotistas = 100<jupyter_output><empty_output><jupyter_text>>Manipulando os dados e aplicando filtros<jupyter_code>fundos = informes_diarios[informes_diarios['NR_COTST'] >= minimo_cotistas].pivot(index="DT_COMPTC", columns = "CNPJ_FUNDO", values = ["VL_TOTAL",	"VL_QUOTA", "VL_PATRIM_LIQ",	"CAPTC_DIA",  "RESG_DIA"])
fundos
cotas_normalizadas = fundos["VL_QUOTA"] / fundos["VL_QUOTA"].iloc[0]
cotas_normalizadas<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1396598030438675, 'fraction_numerical': 0.02088928678006565, 'mean_word_length': 6.1931330472103, 'pattern_counts': {'":': 0, '<': 21, '<?xml version=': 0, '>': 27, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '5', 'dir': 'jupyter-structured-clean-dedup', 'id': '183420', 'license': 'MIT', 'n_tokens_mistral': 1449, 'n_tokens_neox': 1342, 'n_words': 207, 'path': 'Acesso_CVM.ipynb', 'repo_name': 'Paiva-Coppe/Base', 'size': '3351'}