quarta-feira, 3 de janeiro de 2024

Zooidentify Taxo-program (in-Python program)

 

Download Zooidentify Taxo-program:

Um programa para plataforma Windows foi gerado em python e está disponível para download neste link (https://drive.google.com/file/d/1YIolcP-w84CZfiZqTCvh6nAVLEqkUfqo/view?usp=sharing).

INTRODUÇÂO

Ao trabalhar com meio ambiente, diversidade de espécies ou gestão ambiental, seja na área acadêmica ou na área profissional, é importante que antes de ir para uma área já se saiba, de forma especulativa, quais espécies poderiam ocorrer nela. Isso requer conhecimentos prévios provenientes de experiência ou consultas bibliográficas.

A pesquisa/trabalho (como ecologia, paleontologia, perícia) é muitas vezes limitada a algumas ordens devido à impossibilidade de conhecimento amplo das espécies, desperdiçando oportunidades. Novas técnicas estão colaborando para saber onde essas espécies ocorriam anteriormente. A Modelagem de Nicho Ecológico (Peterson et al. 2011, Elith & Leathwick 2009) está sendo constantemente aprimorada, onde ambientes com ocorrências conhecidas de uma espécie são inferidos a partir de vários bancos de dados, e um modelo é construído de onde ocorrem ambientes com características semelhantes

Os trabalhos de determinação de espécies geralmente são baseados na observação de caracteres morfológicos, uma ferramenta comumente utilizada para isso, e com grande eficiência ao longo dos anos é a chave dicotômica (Dallwitz & Zurcher 2010), que se baseia na determinação seguindo uma sequência linear de escolha de caracteres (presentes/ausentes) até a chegada da espécie em questão, exigindo muitas etapas, tempo e conhecimento prévio de termos específicos e muitas vezes permitindo diferentes interpretações do carater, causando dificuldades. Outras ferramentas como a genética utilizando Blast (2003, Schindel & Miller 2013) também estão disponíveis, mas demandam custo e tempo, sendo mais aplicadas em refinamentos de delimitação de espécies.

A informática desempenhou um papel importante no desenvolvimento da pesquisa, automação e disponibilização de informação, entre outros, sendo cada vez mais desenvolvida e complexa, onde agora com a utilização da ferramenta DeepLearn (Schulz & Behnke 2012, Lecun et al. 2015) é capaz determinar algumas espécies (Borowiec et al. 2022), especialmente os objetos mais comerciais e populares, sendo uma ferramenta promissora, porém dependente de bancos de dados disponíveis, uma vez que este software trabalha com base em estatísticas.

Python é um sistema multifuncional, possuindo muitos usuários, sendo uma ferramenta já consagrada no mercado, apesar de ser complexa, entre outros (Ex: Java, Visual Basic) é o mais rápido de aprender, além de possuir inúmeros fóruns de ajuda ( Por exemplo, Stackoverflow, 2023). Também possui diversas bibliotecas que facilitam o desenvolvimento de novas ferramentas.

O objetivo deste trabalho é apresentar uma proposta de ferramenta eletrônica aplicada a trabalhadores que lidam com taxonomia. É apresentado aqui um programa para fácil determinação de espécies, aqui apresentado apenas para demonstrar a nova ferramenta, baseado em dados publicados anteriormente para peixes nativos de água doce no estado do Rio Grande do Sul (Malabarba, 2023). Mas as tabelas CSV podem ser abertas em qualquer ordem com caracteres de interesse do pesquisador. Este modelo de pesquisa pode ser adaptado para uso em sites científicos (E.G. Frost 2023, Frick & Fong 2023 ou Silveira, 2018) ou smartphones.

MATERIAIS e METODOS

Utilizando Python 3.8 (Van Rossum & Drake 1995) foram utilizadas as seguintes bibliotecas: CSV, Folium, Geopandas, OS, PIL, SYS, Tkinter e WebBrowsers.

Banco de dados de espécies de água doce descritas por Malabarba (2023) e ocorrências marinhas indicadas como ocorrendo no Rio Grande do Sul segundo Froese & Pauly 2000.

Modelo de distribuição: Para os polígonos de distribuição, com base na lista de espécies indicada por Malabarba (2023), foi realizada uma busca no Splink (2023) por pontos de ocorrência, com inclusão de outros pontos coletados em vouchers do Museu de Ciências Naturais do Rio Grande do Sul (MCN). Conforme relatou Dalapicolla (2022), foi realizada a raridade de espécies com pelo menos 10km, e os pontos “outliers” foram excluídos.

Quando uma espécie não possuía informações suficientes para gerar o modelo, foi utilizada a sub-bacia mais próxima do ponto de ocorrência conforme modelos ANA 2023.

Para os dados ambientais foi determinado um polígono que apresenta todo o estado (limitado por Long -49 a -57,6 e lat -27 a -33,75), pois a distribuição de muitas espécies não se limita a este polígono, não possuindo pontos suficientes em no estado, são aplicadas duas metodologias; O primeiro com 19 camadas ambientais (Fick & Hijmans 2017) para toda a América do Sul. Posteriormente cortando o polígono de interesse. A segunda metodologia, para espécies com pontos suficientes na área do polígono, incluímos as variáveis categóricas Hidrograma (ANA, 2023), Geologia (geoinfo, 2020), Vegetação (Hasenack et al. 2017) e Cobertura do globo (Nelson et al. 2020) e restringi-los apenas ao polígono. Para ambos, utilizando o sdmtoolbox (Brown, 2017), foi realizada uma PCA de heterogeneidade para as variáveis contínuas e a utilização do arquivo Bias conforme instruções de Dalapicolla, J. (2022).

A modelagem foi realizada em MAXENT (Steven et al, 2023), utilizou bootstrap, 10%, 100 interações com 100 réplicas. O modelo padrão utilizado foi o mapa mediano. A partir deste mapa, foi montado um novo mapa de ocorrência/ausência com dados acima de 60% de similaridade de nicho.

Para viabilizar o modelo, os caracteres utilizados para a chave de demonstração do programa foram utilizados no banco de dados disponível na UFRGS, sendo minimamente adaptados ao programa.

RESULTADOS

O programa é composto por quatro ferramentas, que estão disponíveis no menu “iniciar”, a saber: Find by name, Find by KML, Key, Show map e Open CSV.

Find by name: Esta ferramenta apresenta uma lista com todos os 419 nomes de espécies que ocorrem no Rio Grande do Sul mais seus sinônimos (incluindo espécies marinhas). A seleção do nome resulta em duas listas, uma com o nome atual e outra com sinônimos. É possível gerar um TXT a partir desta lista.

Find by KML: Nesta ferramenta é solicitado um arquivo KML. Com base nos polígonos das bacias hidrográficas e nos modelos, realiza a busca sobreposta, resultando em uma lista de espécies com possível ocorrência no local indicado no arquivo. É possível gerar um arquivo TXT com a lista resultante. As ocorrências aqui incluem aquelas que estão restritas à bacia sub-hidrográfica e aos mapas constantes no “Show map”.

Key: Esta ferramenta permite ao usuário usar os dados com os quais é mais confortável trabalhar. Anteriormente neste programa, todos os dados coletados no site já estão disponíveis nativamente, sendo separados por ‘corpo’, ‘forma’, ‘cabeça’, ‘nadadeiras’ e ‘coloração’. A partir desta etapa, é possível fazer uma restrição em duas etapas, desde as 412 espécies (restritas à água doce) incluídas, até um número bem menor ou único. Na janela de resultados é possível gerar um arquivo TXT com as espécies resultantes daquela seleção. Quanto melhores caracteres forem escolhidos, mais fácil será determinar a espécie. Para refinar a busca é necessário fazer uma nova busca e comparar os resultados.

Entre as opções, haverá duas abreviaturas codificadas, um “M” que indica que se trata de um caracteres exclusivo para indivíduos do sexo masculino; ou um “n” que indica que haverá uma quarta questão referente aos números.

Show map: Esta opção é utilizada para visualizar em um navegador os modelos de distribuição que estão sendo utilizados na busca “Find by KML”, exceto aqueles utilizados com os limites das microbacias.

Open CSV: Esta opção é igual a “Key”, mas permite ao usuário, a partir de uma edição livre de uma tabela em extensão “.CSV”, poder trabalhar com esta ferramenta. Como o programa abre a opção também de separar em cinco itens, lendo as colunas B, C e D na primeira opção; colunas E, F e G na segunda opção; colunas H, I e J na terceira opção; K, L e M na opção quarta; N, O e P na última opção. Não é permitido cabeçalho no nome, devendo a coluna A conter o nome da espécie, sendo repetido conforme necessário, nunca em branco. Um modelo de como deve ser o arquivo CSV está disponível na Tabela 1, adaptada de Malabarba (2023).

A segunda coluna de cada opção apresenta uma especificação maior que a primeira coluna; portanto, para funcionar é obrigatório o preenchimento da primeira coluna; A terceira coluna contém apenas valores numéricos que precisam das duas anteriores para funcionar. Não é obrigatório preencher valores para todas as colunas.

Problemas que ocorrem ao abrir arquivos; Mesmo sem valores, o arquivo deve conter 16 colunas; O arquivo só funciona se estiver separado por ',' que dependendo das configurações do computador, mesmo escolhendo a extensão CSV, utiliza outros caracteres; Não pode haver pontuação ou espaços nas palavras, apenas o sublinhado '_' e o ponto final '.' sendo aceito, além do uso de caracteres simples.

DISCUSSÃO

Como os objetivos de criação dos modelos não foram avaliar nichos ecológicos e a construção dos modelos foi realizada de forma genérica para todas as espécies, não respeitando suas individualidades, este modelo não é definitivo, e para futuras atualizações do programa apenas modelos será usado. A partir de dados publicados para esse fim.

Quanto aos caracteres, funciona bem o suficiente para a demonstração da ferramenta. Porém, como esses dados foram desenvolvidos para outra finalidade, podem não gerar informações adequadas ou imprecisas.

 

REFERENCIAS

Agência Nacional de Águas (ANA). 2019 Manual de Usos Consuntivos da Água no Brasil. Brasília: ANA. Available from: https://metadados.snirh.gov.br/geonetwork/srv/api/records/b228d007-6d68-46e5-b30d-a1e191b2b21f  Accessed 12 December 2022.

Basic Local Alignment Search Tool (Blast): National Library of Medicine (US), National Center for Biotechnology Information; 2004. Available from: https://www.ncbi.nlm.nih.gov/gene/ Accessed 12 December 2022.

Borowiec, M. L., Dikow, R. B., Frandsen, P. B., McKeeken, A., Valentini, G., & White, A. E. (2022) Deep learning as a tool for ecology and evolution. Methods in Ecology and Evolution, 13(8), 1640-1660.

Elith, J., & Leathwick, J. R.. (2009) Species distribution models: ecological explanation and prediction across space and time. Annual Review of Ecology, Evolution, and Systematics, 40, 677-697.

Jason L. Brown (2017) SDMtoolbox 2.0 User Guide. Southern Illinois University. Available from: http://www.sdmtoolbox.org/data/sdmtoolbox/current/User_Guide_SDMtoolbox.pdf Accessed 12 December 2022.

Dalapicolla, J. (2022) Tutorial de modelos de distribuição de espécies: guia prático usando o maxent e o arcgis 10. Available in: https://blog.ufes.br/lamab/files/2016/07/Tutorial-de-modelos-de-distribuição-guia-prático.pdf

Dallwitz M. J., Paine T. A., Zurcher E. J. (2000) Onwards. Principles of interactive keys. Available at http://delta-intkey.com/www/interactivekeys.htm Accessed 12 December 2022.

Frick, R; Eschmeyer, W.; Fong, J. D.. (2022) Genera/Species by Family/Subfamily in Eschmeyer’s Catalog of Fishes. California Academy of Sciences. Available at http://researcharchive.calacademy.org/research/ichthyology/catalog/SpeciesByFamily.asp Accessed 12 December 2022.

Fick, S. E., & Hijmans, R. J. (2017) WorldClim 2: new 1‐km spatial resolution climate surfaces for global land areas. International journal of climatology,  37(12), 4302-4315.

Froese, R. and D. Pauly. (2000) FishBase 2000: concepts, design and data sources. ICLARM, Los Baños, Laguna, Philippines. 344 p  Available in. https://www.fishbase.se/search.php Accesse12 12 2022.

Frost D. R. (2022) Amphibian Species of the World: an Online Reference. Version 6.0. Electronic Database. Available at: http://research.amnh.org/herpetology/amphibia/index.html. American Museum of Natural History, New York, USA. Accessed 12 December 2022.

Geoinfo (2020) Metadados, Mapa de solos do Brasil. Available at http://geoinfo.cnps.embrapa.br/layers/geonode%3Abrasil_solos_5m_20201104/metadata_read Accessed 12 December 2022.

Hasenack H. J. S., & Hofmann, E. J. W. G. S. (2017) A digital version of Hueck’s vegetation map of South America: 50 years after the release of his book on the subcontinent's forests.

LeCun, Y., Bengio, Y., & Hinton, G. (2015) Deep learning. nature, 521(7553), 436-444.

Malabarba, L. R. (2020) Guia digital de identificação de peixes do estado do Rio Grande do Sul. Available at https://www.ufrgs.br/peixesrs/. Accessed 12 December 2022.

Nelson, P., Low, R., Soeffing, C., Clark, A., & SEES (2020) Mosquito Mappers Research Team. (2021). Adopt a Pixel 3 km: A Multiscale Data Set Linking Remotely Sensed Land Cover Imagery with Field Based Citizen Science Observation (Version 1.0) Zenodo. Available at https://doi.org/10.5281/zenodo.5542310 Accessed 12 December 2022.

Peterson, A. T., Soberón, J., Pearson, R. G., Anderson, R. P., Martínez-Meyer, E., Nakamura, M., & Araújo, M. B. (2011) Ecological Niches and Geographic Distributions (MPB-49). Princeton University Press. & Elith, J., & Leathwick, J. R.

Schindel, D. E., & Miller, S. E. (2013) DNA barcoding a useful tool for taxonomists. Nature, 497(7447), 181-182.)

Specieslink - simple search. 2022. Available at http://www.splink.org.br/index Accessed 12 December 2022.

Silveira, F. F. (2018) Fauna Digital do Rio Grande do Sul. Bird and Mammal Evolution, Systematics and Ecology Lab - UFRGS. Available at: https://www.ufrgs.br/faunadigitalrs/cobra-cipo-metalicauromacerina-ricardinii/. Accessed on 12 December 2022.

Stack overflow. (2023). Available at https://stackoverflow.com/ Accessed on 12 December 2022.

Schulz, Hannes; Behnke, Sven (2012)"Deep Learning". KI - Künstliche Intelligenz. 26 (4): 357–363. doi:10.1007/s13218-012-0198-z. ISSN 1610-1987. S2CID 220523562.

Steven J. Phillips, Miroslav Dudík, Robert E. Schapire. (2017) Maxent software for modeling species niches and distributions (Version 3.4.1). Available from http://biodiversityinformatics.amnh.org/open_source/maxent/. Accessed on 12 December 2022.

Van Rossum, G., & Drake Jr, F. L. (1995) Python reference manual. Centrum voor Wiskunde en Informatica Amsterdam.

Widholzer, R. L., & Prietro-Torres, D. A. (2022) Novel data on the distribution patterns and ecological differentiation of four species of treefrogs (Hylidae: Boana) in southeastern South America. North-Western Journal Of Zoology, 18(2), 168-178.

Widholzer, R. (2023) RS-Consultoria - Apresentação de trabalhos de Data Science em Python. Available from http://rs-consultoria.blogspot.com Accessed on 12 December 2022.

 

TABELA de EXEMPLO

 

Table 1. Model of CSV to be used in “opens CSV’ option;

Name_1,Body,Wide,,Covering,Plate,,,,,Caudal,Concave,,Head_color,Red,,,

Name_1,,,,n_plates,Lateral_line,1,,,,Adpose_fin,Present,,,,,,

Name_1,,,,n_plates,Lateral_line,2,,,,,,,,,,,

Name_1,,,,n_plates,Lateral_line,3,,,,,,,,,,,

Name_1,,,,n_plates,Lateral_line,4,,,,,,,,,,,

Name_2,Body,Narrow,,Covering,Plate,,,,,Caudal,Concave,,Head_color,Blue,,,

Name_2,,,,n_plates_lateral_line,,20,,,,Adpose_fin,Present,,,,,,

Name_2,,,,n_plates,Lateral_line,21,,,,,,,,,,,

Name_2,,,,n_plates,Lateral_line,22,,,,,,,,,,,

Name_2,,,,n_plates,Lateral_line,23,,,,,,,,,,,

Name_3,Body,Narrow,,Covering,Plate,,,,,Caudal,Convex,,Head_color,Yellow,,,

Name_3,,,,n_plates_lateral_line,,0,,,,Adpose_fin,Present,,,,,,

Name_4,Body,Wide,,Covering,Scales,,,,,Caudal,Concave,,Head_color,White,,,

Name_4,,,,,,,,,,Adpose_fin,Absent,,,,,,

terça-feira, 18 de abril de 2023

Regressão linear multi grupo / predição / coeficiente angular e significância

 import pandas as pd

import matplotlib.pyplot as plt

import numpy as np

from sklearn.linear_model import LinearRegression




plt.style.use('ggplot')

df = pd.read_csv('data.csv')

df_1 = df[df['sp'] == 1]

df_2 = df[df['sp'] == 2]

df_3 = df[df['sp'] == 3]

df_4 = df[df['sp'] == 4]

df_5 = df[df['sp'] == 5]

#df_1 = df[df['sp'] == 'ancistrus']

sp1_fit = np.polyfit(df_1.cp, df_1.peito, 1)

sp2_fit = np.polyfit(df_2.cp, df_2.peito, 1)

sp3_fit = np.polyfit(df_3.cp, df_3.peito, 1)

sp4_fit = np.polyfit(df_4.cp, df_4.peito, 1)

sp5_fit = np.polyfit(df_5.cp, df_5.peito, 1)


# Scatter plots.

#ax1 = df[df['nome_coluna'] == 'nomelinha'].plot(kind='scatter', x='nomecolunaA', y='nomecolunaB', color='blue', alpha=0.5, figsize=(10, 7))

ax1 = df[df['sp'] == 1].plot(kind='scatter', x='cp', y='peito', color='blue', alpha=0.5, figsize=(10, 7))

df[df['sp'] == 2].plot(kind='scatter', x='cp', y='peito', color='red', alpha=0.5, figsize=(10 ,7), ax=ax1)

df[df['sp'] == 3].plot(kind='scatter', x='cp', y='peito', color='purple', alpha=0.5, figsize=(10 ,7), ax=ax1)

df[df['sp'] == 4].plot(kind='scatter', x='cp', y='peito', color='orange', alpha=0.5, figsize=(10 ,7), ax=ax1)

df[df['sp'] == 5].plot(kind='scatter', x='cp', y='peito', color='green', alpha=0.5, figsize=(10 ,7), ax=ax1)

plt.legend(labels=['nomes', 'nomes2'])

plt.title('titulo', size=24)

plt.xlabel('nomeBarrax', size=18)

plt.ylabel('nomeBarraY', size=18);


# regression lines

plt.plot(df_1.cp, sp1_fit[0] * df_1.cp + sp1_fit[1], color='darkblue', linewidth=2)

plt.plot(df_2.cp, sp2_fit[0] * df_2.cp + sp2_fit[1], color='deeppink', linewidth=2)

plt.plot(df_3.cp, sp3_fit[0] * df_3.cp + sp3_fit[1], color='purple', linewidth=2)

plt.plot(df_4.cp, sp4_fit[0] * df_4.cp + sp4_fit[1], color='orange', linewidth=2)

plt.plot(df_5.cp, sp5_fit[0] * df_5.cp + sp5_fit[1], color='green', linewidth=2)


# legend, title and labels.
plt.legend(labels=['Males Regresion Line', 'Females Regresion Line', 'Males', 'Females'])
plt.title('Relationship between Height and Weight', size=24)
plt.xlabel('Height (inches)', size=18)
plt.ylabel('Weight (pounds)', size=18);

# rodar os 3 juntos


lr_espinho = LinearRegression()

lr_espinho.fit(df_1[['cp']], df_1['peito'])

print(lr_espinho.intercept_)


sp1_fit = np.polyfit(df_1.cp, df_1.peito, 1)

sp2_fit = np.polyfit(df_2.cp, df_2.peito, 1)


#Coeficiente Angular  

print(np.polyval(sp1_fit, [50]))

# 60 [17.82209715]  - 50[14.26088829] #x=50 e x=60

#3.56 / diferença do X(10)

print(np.polyval(sp2_fit, [60]))

#60 [17.1713] & 50[13.7081]

#3.46


Ex: tabela csv


Ex: resultado 


 



quinta-feira, 12 de janeiro de 2023

Gerar TXT nome com data

from datetime import datetime

        self.txts=[]

        self.file_name = 'fishfromKML{}.txt'.format(datetime.now().strftime("%Y%m%d%H%M%S%z"))

        self.txts.append(self.nomes)

        with open (self.file_name, 'w') as self.f:

            self.f.write(str(self.txts)) 

self.nomes = ['casa']

Abrir arquivo (Open File)

 

Import CSV

from tkinter import *

import pandas as pd

with open('Filename.csv',newline='') as self.myfile:

            self.csv_file = csv.reader(self.myfile, delimiter=',')

 

            self.Menusyn=[]

            for i in self.csv_file:

                self.Menusyn.append(i[0])

            self.syn = list()

            for self.value in self.Menusyn:

                if self.value not in self.syn:

                    self.syn.append(self.value)

        def textnome(event):

            self.doctext = pd.read_csv("Filename.csv",encoding='utf-8')

            self.readertx = pd.DataFrame(self.doctext)

            self.nomeerrado= self.doctext.columns[0]

            self.doc_selecao = self.readertx.loc[self.readertx[self.nomeerrado] == self.Combosyn.get()]

            self.linhatx = 0

            self.frame = 4

            while self.linhatx < len(self.doc_selecao):

                       self.locali = self.doc_selecao.iloc[self.linhatx,1]

                       tk.Label(self.brachs, text = self.locali).grid(row=self.frame,column=2)

                       tk.Label(self.brachs, text = "Current name").grid(row=3,column=2)

                       self.linhatx = self.linhatx+1

                       self.frame = self.frame+1

        self.brachs = root

        self.frame = tk.Frame(self.brachs)

        self.brachs = Tk()

        self.brachs.geometry("500x100")

        tk.Label(self.brachs, text = "Nome").grid(row=1,column=1)

        self.brachs.title("Find name")

        self.Combosyn = ttk.Combobox(self.brachs, width = 30, height = 20)

        self.Combosyn.grid(row=2, column=1)

        self.syn=sorted(self.syn)

        self.Combosyn ['values']= self.syn

        self.Combosyn.bind("<<ComboboxSelected>>",textnome)

Adicionar imagem no Frame

 

pip install pillow

from PIL import ImageTk, Image       

        widget1 = Frame(master)

        #rootFrame.Destroy()

        widget1.grid()

        imagem = ImageTk.PhotoImage(Image.open("namephoto.png"))

        image = Image.open("namephoto.png")

        photo = ImageTk.PhotoImage(image)

        imagem = Label(master, text = "infomation", image = photo)

        imagem.image = photo

        imagem.grid()

        teste = Label(widget1)

        teste.grid()       

terça-feira, 10 de janeiro de 2023

Setup - gerar exe

from cx_Freeze import setup, Executable


import os, sys

import cx_Freeze

base='win32GUI'

#if sys.platform =="win32":

#    base = 'win32GUI'

#sys.setrecursionlimit(100000)

sys.argv.append("build")

#python runexecx.py bdist_msi # ou # python runexecx.py build# no cmd digitar 

build_exe_opitions= {'packages':['tkinter', 'datetime', 'geopandas', 'pandas', 'csv', 'os', 'sys', 'PIL', 'webbrowser', 'html'],'include_files':['Chave_sinonimia.csv','mapa1.HTML','Peixe.png','ibicui.json'], 'excludes':['matplotlib','numpy', 'abc', ' argparse', 'asyncio', 'atexit', 'base64', 'bdb', 'binascii', 'bisect', 'bz2', 'calendar', 'cmd', 'codecs', 'codeop', '__future__', 'collections', 'collections.abc', 'concurrent', 'contexlib', 'copy', 'copyreg', 'ctypes', 'dataclasses', 'decimal', 'difflib', 'dis', 'distutils', 'doctest', 'email', 'enum', 'errno', 'fnmatch', 'fractions', 'functools', 'gc', 'genericpach', 'getopt', 'gettext', 'glob', 'heapq', 'hashlib', 'http', 'importlib', 'inspect', 'io', 'intertools', 'keyword', 'lib2to3', 'linecache', 'locale', 'logging','marshal', 'math', 'msvcrt', 'multiprocessing', 'nt', 'ntpach', 'numbers', 'opcode', 'operator', 'os.pach', 'pach', 'patchlib', 'pdb', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pprint', 'pydoc', 'pydoc_data', 'quopri', 'random', 're', 'reprlib', 'runpy', 'select', 'selectors', 'shlex', 'shutil', 'signal', 'soket', 'sre_copile','sre_constants', 'sre_parse', 'stats', 'statistics', 'string', 'stringprep', 'struct', 'subprocess', 'sysconfig', 'tarfile', 'tempfile', 'test', 'textwrap', 'threading', 'time', 'token', 'tokenize', 'traceback', 'tracemalloc', 'tty', 'types', 'tuping', 'unicodedata', 'unittest', 'urllib', 'warnings', 'weakref', 'winreg', 'xml', 'xmlrpc', 'zipfile', 'zipimport', 'zlib' ]}

cx_Freeze.setup(name='teste', executables=[Executable('pograma_instalpy.py', base = base)],)

def find_data(filename):#15:48

    if getattr(sys, 'frozen', False):

        datadir=os.patch.dirname(sys.executable)

    else:

        datadir = os.path.dirname(__file__)

    return os.patch.join(datadir,filename)


sexta-feira, 16 de dezembro de 2022

LDA com iris

 import numpy as np

class LDA:

    def __init__(self, n_components):

        self.n_components = n_components

        self.linear_discriminants = None

    def fit(self, x, y):

        n_features = x.shape[1]

        class_labels = np.unique(y)

        mean_overall = np.mean(x, axis=0)

        S_W = np.zeros((n_features,n_features))

        S_B = np.zeros((n_features,n_features))

        for c in class_labels:

            X_c = x[y==c]

            mean_c = np.mean(X_c, axis=0)

            S_W+= (X_c - mean_c).T.dot(X_c-mean_c)

            n_c = X_c.shape[0]

            mean_diff = (mean_c - mean_overall).reshape(n_features,1)

            S_B += n_c*(mean_diff).dot(mean_diff.T)

        A = np.linalg.inv(S_W).dot(S_B)

        eigenvalues, eigenvectors = np.linalg.eig(A)

        eigenvectors = eigenvectors.T

        idxs= np.argsort(abs(eigenvalues))[::-1]

        eigenvalues = eigenvalues[idxs]

        eigenvectors = eigenvectors[idxs]

        self.linear_discriminants = eigenvectors[0:self.n_components]

        

    def transform (self, x):

        return np.dot(x, self.linear_discriminants.T)


#### pra ser igual do PCA

from sklearn import datasets

#pip install lda

import matplotlib.pyplot as plt

#import numpy as np

#from lda import LDA

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA



data = datasets.load_iris()

x=data.data

y=data.target


lda= LDA(2) #(dois exios)

lda.fit (x,y)

X_projected = lda.transform(x)


print ('shape of x', x.shape)

print ('shape of transformed x:', X_projected.shape)


x1 = X_projected[:,0]

x2 = X_projected[:,1]

plt.scatter (x1,x2,c=y, edgecolor='none', alpha=0.8, cmap=plt.cm.get_cmap('viridis',3))

plt.xlabel('linear discriminant 1')

plt.ylabel('linear discriminant 2')

plt.colorbar()

plt.show()