Baixe o app para aproveitar ainda mais
Prévia do material em texto
07/03/2021 Um g ia di e a a lim a e e a a dad em P h F a k A d ade Ma de 2021 R m ci cia de dad h :// a d da a cie ce.c m/a- aigh f a d-g ide- -clea i g-a d- e a i g-da a-i - h -8c82f209ae33 1/16 S 562 Um g ia dire o para limpar e preparar dado em P hon C ca a c a . F a a a 9 a a á 10 a F c U a V cê a a 1 a a a a a b ê . U a acc a a b c ê c a a a . Ab a caAb a ca 07/03/2021 Um g ia di e a a lim a e e a a dad em P h F a k A d ade Ma de 2021 R m ci cia de dad h :// a d da a cie ce.c m/a- aigh f a d-g ide- -clea i g-a d- e a i g-da a-i - h -8c82f209ae33 2/16 Os dados do mundo real estão sujos. Na verdade, cerca de 80% do tempo de um cientista de dados gasto na coleta, limpe a e preparação de dados. Essas etapas tediosas (mas necessárias) tornam os dados adequados para qualquer modelo que desejamos construir e garantem a alta qualidade dos dados. A limpe a e preparação de dados pode ser complicado algumas t imes, portanto, neste artigo, eu gostaria de fa er esses processos mais fáceis, mostrando algumas t cnicas, m todos e funç es usadas para limpar e preparar dados. Para fa er isso, usaremos um conjunto de dados Netfli dispon vel no Kaggle que cont m informaç es sobre todos os t tulos no Netfli . Estou usando conjuntos de dados de filmes porque eles são frequentemente usados em tutoriais para muitos projetos de ci ncia de dados, como análise de sentimento e construção de um sistema de recomendação. Voc tamb m pode seguir este guia com um conjunto de dados de filmes da IMDb, MovieLens ou qualquer conjunto de dados que voc precise limpar. Embora o conjunto de dados Kaggle possa parecer bem organi ado, ele não está pronto para ser usado, portanto, identificaremos dados ausentes, outliers, dados inconsistentes e faremos a normali ação do te to. Isso mostrado em detalhes na tabela abai o. d ce 1. Vi o ge al pida do conj n o de dado 2. Iden ifiq e dado a en e - C ie ma li a de po cen agem com .i n ll () 3. Lidando com dado a en e - Remo a ma col na o linha com .d op, .d opna o .i n ll - S b i a pela m dia , mediana o modo - S b i a po m n me o a bi io po .fillna () 4. Iden ificando o lie - U ando hi og ama pa a iden ifica o lie em dado n m ico - U ando bo plo pa a iden ifica o lie em dado n m ico - U ando ba a pa a iden ifica o lie em dado ca eg ico 5. T a amen o com o lie - U ando ope ado e & pa a fil a o lie 6. Lidando com dado incon i en e an e de me cla 2 Da af ame - Lidando com nome de col na incon i en e - Lidando com ipo de dado incon i en e - Lidando com nome incon i en e , po e emplo, "Ne Yo k" "NY" 7. No mali a o de e o - Lidando com capi ali a o incon i en e Ab a ca 07/03/2021 Um g ia di e a a lim a e e a a dad em P h F a k A d ade Ma de 2021 R m ci cia de dad h :// a d da a cie ce.c m/a- aigh f a d-g ide- -clea i g-a d- e a i g-da a-i - h -8c82f209ae33 3/16 - Remo a o e pa o em b anco com . ip () - Remo a o b i a ing com . eplace () o . b () 8. Me clando conj n o de dado - Remo a d plica a com .d op_d plica e () 1. V ã a á a c a A primeira coisa a fa er depois de bai ar um conjunto de dados verificar o tipo de dados de cada coluna (os valores de uma coluna podem conter d gitos, mas podem não ser datetime ou tipo int) Depois de ler o arquivo CSV, digite .d e para encontrar o tipo de dados de cada coluna. df_ne fli _2019 = pd. ead_c ('ne fli _ i le .c ') df_ne fli _2019.d pe Depois de e ecutar esse c digo, voc obterá a seguinte sa da. ho _id in 64 ipo obje o lo obje o di e o obje o elenco pa obje o da a_added obje o elea e_ ea in 64 a alia o obje o d a o obje o li ado_in obje o de c i o obje o d pe: obje o Isso o ajudará a identificar se as colunas são variáveis num ricas ou categ ricas, o que importante saber antes de limpar os dados. Agora, para encontrar o n mero de linhas e colunas que o conjunto de dados cont m, use o . ha e m todo. In [1]: df_ne fli _2019. hape O [1]: (6234, 12) #E e conj n o de dado con m 6234 linha e 12 col na . Ab a ca 07/03/2021 Um g ia di e a a lim a e e a a dad em P h F a k A d ade Ma de 2021 R m ci cia de dad h :// a d da a cie ce.c m/a- aigh f a d-g ide- -clea i g-a d- e a i g-da a-i - h -8c82f209ae33 4/16 2. I ca a a A falta de dados às ve es ocorre quando a coleta de dados foi feita de maneira inadequada, erros foram cometidos na entrada de dados ou os valores dos dados não foram arma enados. Isso acontece com frequ ncia e devemos saber como identificá-lo. C a a c a c . () Uma abordagem simples para identificar dados ausentes usar os m todos .i ll() e . m() df_ne fli _2019.i n ll (). m () Isso nos mostra uma s rie de valores NaN em cada coluna. Se os dados contiverem muitas colunas, voc pode usar . _ al e (a ce di g=Fal e) para colocar as colunas com o maior n mero de valores ausentes no topo. ho _id 0 ipo 0 lo 0 di e o 1969 elenco 570 pa 476 da a_added 11 elea e_ ea 0 cla ifica o 10 d a o 0 li ado_in 0 de c i o 0 d ipo: in 64 Dito isso, geralmente represento os valores ausentes em porcentagens, portanto, tenho uma imagem mais clara dos dados ausentes. O c digo a seguir mostra a sa da acima em % 1 2 3 4 #% de linhas ausentes em cada coluna para coluna em df_netflix_2019 . colunas : porcentagem = df_netflix_2019 [ coluna ]. isnull (). significa () imprimir ( f ' { coluna } : { redondo ( porcentagem * 100 , 2 ) } %' ) Ab a ca 07/03/2021 Um g ia di e a a lim a e e a a dad em P h F a k A d ade Ma de 2021 R m ci cia de dad h :// a d da a cie ce.c m/a- aigh f a d-g ide- -clea i g-a d- e a i g-da a-i - h -8c82f209ae33 5/16 Agora mais evidente que um bom n mero de diretores foi omitido no conjunto de dados. ho _id: 0,0% pe: 0,0% lo: 0,0% di e o : 31,58% elenco: 9,14% pa : 7,64% da e_added: 0,18% elea e_ ea : 0,0% cla ifica o: 0,16% d a o: 0,0% li ado_in: 0,0% de c i o: 0,0% Agora que identificamos os dados ausentes, precisamos administrá-los. 3. L a c Da P E istem diferentes maneiras de lidar com dados ausentes. A abordagem correta para lidar com os dados ausentes será altamente influenciada pelos dados e objetivos do seu projeto. Dito isso, a seguir estão tr s maneiras simples de lidar com dados ausentes. R a a c a a c . , . a . Se voc considerar que necessário remover uma coluna porque ela tem muitas linhas va ias, voc pode usar .d () e adicionar a i =1 como um parâmetro para indicar que o que voc deseja eliminar uma coluna. No entanto, na maioria das ve es, apenas o suficiente para remover as linhas que cont m esses valores va ios. E istem diferentes maneiras de fa er isso. 1 2 #drop column df_netflix_2019.drop('director', axis=1) 1 2 3 4 5 #drop row no_director = df_netflix_2019[df_netflix_2019['director'].isnull()].index df_netflix_2019.drop(no_director, axis=0) #~ + .isnull() df netflix 2019[~df netflix 2019['director'].isnull()] Ab a ca 07/03/2021 Um g ia di e a a lim a e e a a dad em P h F a k A d ade Ma de 2021 R m ci cia de dad h :// a d da a cie ce.c m/a- aigh f a d-g ide- -clea i g-a d- e a i g-da a-i - h -8c82f209ae33 6/16 A primeira solução usa .d com a i =0 para eliminar uma linha. A segunda identifica os valores va ios e assume os valores não va ios usando o operador de negação, enquanto a terceira solução usa .d a para descartar linhas va ias dentro de uma coluna. Se voc deseja salvar a sa da ap s soltar, use i lace=T e como um parâmetro. Neste e emplo simples, não eliminaremos nenhuma coluna ou linha. S b a a é a, a a Outra abordagem comum usar a m dia, mediana ou modo para substituir os valores va ios. A m dia e a mediana são usadas para substituir os dados num ricos, enquanto o modo substitui os dados categ ricos. Como vimos antes, a a i g coluna cont m 0,16% de dados ausentes. Poderamos facilmente completar essa pequena porção de dados com o modo, pois a i g um valor categ rico. Primeiro, calculamos o modo (TV-MA) e, em seguida, preenchemos todos os valores va ios com .fill a . S b a- a b á c . a () Se os dados forem num ricos, tamb m podemos definir um n mero arbitrário para evitar a remoção de qualquer linha sem afetar os resultados do nosso modelo. Se a d a i coluna fosse um valor num rico (atualmente, o formato string, por e emplo 90 mi e ), poder amos substituir os valores va ios por 0 com o c digo a seguir. df_ne fli _2019 ['d a o']. fillna (0, inplace = T e) 5 6 7 df_netflix_2019[ df_netflix_2019[ director ].isnull()] #dropna() df_netflix_2019.dropna(subset=['director']) 1 2 modo = '' . juntar ( df_netflix_2019 [ 'classifica o' ]. modo ()) df_netflix_2019 [ 'classifica o' ]. fillna ( modo , local = True ) Ab a ca 07/03/2021 Um g ia di e a a lim a e e a a dad em P h F a k A d ade Ma de 2021 R m ci cia de dad h :// a d da a cie ce.c m/a- aigh f a d-g ide- -clea i g-a d- e a i g-da a-i - h -8c82f209ae33 7/16 Al m disso, voc pode usar o ffill , bfill para propagar a ltima observação válida para frente e para trás, respectivamente. Isso e tremamente til para alguns conjuntos de dados, mas não til no df_ e fli _2019 conjunto de dados. 4. I ca Um outlier são os dados que diferem significativamente de outras observaç es. Um conjunto de dados pode conter outliers reais ou outliers obtidos ap s uma coleta de dados insuficiente ou causados por erros de entrada de dados. U a a a a a ca a é c Usaremos a duração como uma refer ncia que nos ajudará a identificar outliers no catálogo da Netfli . A d a i coluna não considerada um valor num rico (por e emplo, 90) em nosso conjunto de dados porque misturada com strings (por e emplo, 90 min). Al m disso, a duração dos programas de TV em temporadas (por e emplo, 2 temporadas), portanto, precisamos filtrá-la. Com o c digo a seguir, pegaremos apenas filmes do conjunto de dados e, em seguida, e trairemos os valores num ricos da d a i coluna. Agora os dados estão prontos para serem e ibidos em um histograma. Voc pode fa er plotagens com matplotlib, seaborn ou pandas em P thon. Nesse caso, farei isso com matplotlib. impo ma plo lib.p plo a pl fig, a = pl . bplo (n o = 1, ncol = 1) pl .hi (df_mo ie ['min o']) fig. igh _la o () O enredo abai o revela como a duração dos filmes distribu da. Observando o gráfico, podemos di er que os filmes na primeira barra (3 – 34 ) e na ltima barra vis vel (> 189 ) são provavelmente outliers. Eles podem ser curtas-metragens ou documentários 1 2 3 #creating column (extract) df_movie = df_netflix_2019 [ df_netflix_2019 [ 'type' ] == 'Filme' ] df_movie = df_movie . atribuir ( minuto = df_movie [ 'dura o' ]. str . extract ( r Ab a ca 07/03/2021 Um g ia di e a a lim a e e a a dad em P h F a k A d ade Ma de 2021 R m ci cia de dad h :// a d da a cie ce.c m/a- aigh f a d-g ide- -clea i g-a d- e a i g-da a-i - h -8c82f209ae33 8/16 longos que não se enquadram bem em nossa categoria de filmes (mais uma ve , ainda depende dos objetivos de seu projeto) I a a U a b a a ca a é c Outra opção para identificar outliers são os bo plots. Prefiro usar bo plots porque dei a os outliers fora dos bigodes da cai a. Como resultado, mais fácil identificar os valores m nimo e má imo sem considerar os outliers. Podemos fa er bo plots facilmente com o c digo a seguir. impo ado do ma como n fig, a = pl . bplo (n o = 1, ncol = 1) a = n .bo plo ( = df_mo ie ['min o']) fig. igh _la o () O bo plot mostra que valores abai o de 43 e acima de 158 são provavelmente outliers. Ab a ca 07/03/2021 Um g ia di e a a lim a e e a a dad em P h F a k A d ade Ma de 2021 R m ci cia de dad h :// a d da a cie ce.c m/a- aigh f a d-g ide- -clea i g-a d- e a i g-da a-i - h -8c82f209ae33 9/16 I a a Al m disso, podemos identificar alguns elementos do bo plot como o quartil inferior (Q1) e o quartil superior (Q3) com o .de c ibe() m todo. In [1]: df_mo ie ['min o']. De c ibe () O [1]: con agem 4265,000000 m dia 99,100821 d 28,074857 min 3,000000 25% 86,000000 50% 98,000000 75% 115,000000 ma 312,000000 Al m disso, voc pode e ibir facilmente todos os elementos do bo plot e at mesmo torná-lo interativo com o Plotl . impo plo l .g aph_objec a pa i de plo l .offline impo iplo , ini _no ebook_mode fig = go.Fig e () fig.add_bo ( = df_mo ie ['min o'], e = df_mo ie ['min o']) iplo (fig) U a ba a a a ca a ca c Caso os dados sejam categ ricos, voc pode identificar categorias com poucas observaç es traçando barras. Ab a ca 07/03/2021 Um g ia di e a a lim a e e a a dad em P h F a k A d ade Ma de 2021 R m ci cia de dad h :// a d da a cie ce.c m/a- aigh f a d-g ide- -clea i g-a d- e a i g-da a-i - h -8c82f209ae33 10/16 Neste caso, usaremos a visuali ação Pandas embutida para fa er o gráfico da barra. fig = df_ne fli _2019 [' a ing']. al e_co n (). plo .ba (). ge _fig e () fig. igh _la o () I a a No gráfico acima, podemos ver que o modo (o valor que aparece com mais frequ ncia na coluna) TV-MA enquanto NC-17 e UR são incomuns. 5. L a c Depois de identificar os outliers, podemos filtrá-los facilmente usando os operadores do P thon. U a a & a a a Os operadores P thon são simples de memori ar. & o equivalente a a d , enquanto o equivalente a . Nesse caso, vamos filtrar outliers com base nos valores revelados pelo bo plot. Ab a ca 07/03/2021 Um g ia di e a a lim a e e a a dad em P h F a k A d ade Ma de 2021 R m ci cia de dad h :// a d da a cie ce.c m/a- aigh f a d-g ide- -clea i g-a d- e a i g-da a-i - h -8c82f209ae33 11/16 #o lie df_mo ie [(df_mo ie ['min o'] <43) (df_mo ie ['min o']> 158)] #fil ando o lie pa a fo a df_mo ie = df_mo ie [(df_mo ie ['min o']> 43) & (df_mo ie ['min o'] <158)] O df_m ie criado agora cont m apenas filmes que duram entre 43 e 158 . 6. L a c a c a c a 2 Da a a Uma tarefa comum com a qual nos deparamos com frequ ncia mesclar dataframes para aumentar as informaç es de uma observação. Infeli mente, na maioria das ve es, os conjuntos de dados t m muitas inconsist ncias porque v m de fontes diferentes. De ag a e d a e, a e eg d c de dad df_ne fli _originals e c é a e a g a d Ne f (.c d í e e e G h b ) e e c a e c c de dad g a df_ne fli _2019 a a de e a c eúd g a e ã g a . L a c c a c Um problema comum com o qual temos que lidar são os nomes de coluna diferentes entre as tabelas. Os nomes das colunas podem ser facilmente alterados com o . e ame m todo. L a c a c Se voc tentar mesclar 2 conjuntos de dados com base em uma coluna que possui tipos de dados diferentes, o P thon gerará um erro. É por isso que voc deve ter certe a de que o tipo o mesmo. Se a mesma coluna tiver tipos diferentes, voc pode usar o .a e m todo para normali á-la. L a c c , , N Y . NY 1 2 3 df_netflix_originals = pd . read_csv ( 'netflix_originals.csv' ) # nomes de coluna inconsintent df_netflix_originals . renomear ( colunas = { 't tulos' : 't tulo' , 'anos' : 'ano_da_la 1 df_netflix_originals = df_netflix_originals.astype({"release_year": int}) Ab a ca 07/03/2021 Um g ia di e a a lim a e e a a dad em P h F a k A d ade Ma de 2021 R m ci cia de dad h :// a d da a cie ce.c m/a- aigh f a d-g ide- -clea i g-a d- e a i g-da a-i - h -8c82f209ae33 12/16 Normalmente, a normali ação da coluna e do tipo de dados suficiente para mesclar aos conjuntos de dados; no entanto, às ve es, e istem inconsist ncias entre os dados na mesma coluna, causadas por erros de entrada de dados (erros de digitação) ou discordâncias na forma como uma palavra escrita. Normalmente, os t tulos dos filmes não apresentam esses problemas. Eles podem terum desacordo na pontuação (vamos cuidar disso mais tarde), mas os filmes geralmente t m um nome padrão, então, para e plicar como lidar com este problema, vou criar um conjunto de dados e uma lista contendo estados escritos em diferentes maneiras. E istem muitas bibliotecas que podem nos ajudar a resolver esse problema. Nesse caso, usarei a f biblioteca. Isso dará uma pontuação com base na distância entre 2 cordas. Voc pode escolher o marcador que melhor se adapta aos seus dados. Vou definir c e =f . ke _ _ a i neste e emplo. Como podemos ver na sa da, o marcador fa um bom trabalho combinando strings. e ado pon a o da pa ida CA Calif nia 33 Ha ai Ha a 91 NY No a Yo k 40 Wa hing on DC Wa hing on 87 No entanto, lembre-se de que ele ainda pode corresponder a nomes errados. 7. N a açã T A normali ação de te to necessária para o processamento de linguagem natural. Isso envolve as seguintes t cnicas para uniformi ar o te to. Removendo espaços em branco, pontuação e caracteres não alfanum ricos Tokeni ação, Stemming, Lemmati ation, remoção de palavras de parada 1 2 3 4 5 do processo de importa o fuzzywuzzy , fuzz estados = [ 'Nova York' , 'Calif rnia' , 'Washington' , 'Hava ' ] df_states = pd . DataFrame ({ 'states' : [ 'NY' , 'CA' , 'Washington DC' , 'Hawai' ]}) df_states [[ 'match' , 'score' ]] = df_states [ 'states' ]. aplicar ( lambda x : proce df_states Ab a ca 07/03/2021 Um g ia di e a a lim a e e a a dad em P h F a k A d ade Ma de 2021 R m ci cia de dad h :// a d da a cie ce.c m/a- aigh f a d-g ide- -clea i g-a d- e a i g-da a-i - h -8c82f209ae33 13/16 Para tornar as coisas simples, este artigo abordará apenas o primeiro ponto. No entanto, voc pode ter uma visão geral de como lidar com a tokeni ação e palavras de interrupção neste artigo que escrevi (verifique a seção Metodologia) L a c ca a açã c Antes de mesclar 2 quadros, temos que nos certificar de que a maioria das linhas corresponderá, e normali ar a capitali ação ajuda com isso. E istem várias maneiras de colocar o te to em letras min sculas em um quadro. Abai o voc pode ver duas opç es ( .a l ou . .l e ) R a aç b a c c . () Às ve es, os dados t m espaços em branco à esquerda ou à direita. Podemos nos livrar deles com o . i m todo R a b a a . ac () . b () Te tos entre dois conjuntos de dados geralmente apresentam diverg ncias na pontuação. Voc pode remov -lo com .a l a d . b ou usando . e lace É bom usar qualquer um deles com e press es regulares. Por e emplo, o rege [^\ \ ] o ajudará a remover caracteres diferentes de palavras (a , AZ, 0–9, _) ou espaços. 8. M c a c a 1 2 df_netflix_originals [ 'title' ] = df_netflix_originals [ 'title' ]. aplicar ( lambda df_netflix_originals [ 'title' ] = df_netflix_originals [ 'title' ]. str . inferior () 1 2 df_netflix_originals['title'] = df_netflix_originals['title'].apply(lambda x:x.strip()) df_netflix_originals['title'] = df_netflix_originals['title'].str.strip() 1 2 3 # remove punctuation: clean characters other than word or spaces df_netflix_originals['title'] = df_netflix_originals['title'].apply(lambda x:re.sub('[^\ df_netflix_originals['title'].replace('[^\w\s]', '', regex=True, inplace=True) Ab a ca 07/03/2021 Um g ia di e a a lim a e e a a dad em P h F a k A d ade Ma de 2021 R m ci cia de dad h :// a d da a cie ce.c m/a- aigh f a d-g ide- -clea i g-a d- e a i g-da a-i - h -8c82f209ae33 14/16 Finalmente, podemos mesclar o conjunto de dados df_ e fli _ igi al e df_ e fli _2019 . Com isso, podemos identificar quais filmes são originais da Netfli e quais pertencem apenas ao catálogo. Nesse caso, fa emos uma junção e terna para fornecer o valor Catálogo a todas as linhas com valores va ios na O igi al" coluna " . R a ca a c . _ ca () Uma das armadilhas da junção e terna com 2 colunas-chave que obteremos linhas duplicadas se considerarmos uma coluna so inha. Nesse caso, mesclamos com base nas colunas i le e elea e_ ea , portanto, mais provável que haja i le duplicatas que tenham diferentes elea e_ ea . Voc pode descartar duplicatas em uma coluna com o .d _d lica e m todo Os dados agrupados por tipo e origem são distribu dos assim. Em [1]: df_ne fli [['o iginal', ' ipo']]. Val e_co n () Fo a [1]: ipo o iginal Ca logo Filme 3763 P og ama de TV 1466 Ne fli P og ama de TV 1009 Filme 504 É isso! Agora os dados estão limpos e prontos para serem processados! Voc ainda pode limpar mais (se necessário) ou usar seus dados em seu projeto de ci ncia de dados 1 2 3 df_netflix = pd . mesclar ( df_netflix_originals , df_netflix_2019 , on = [ 't tulo' , como = 'externo' ) df_netflix [ 'original' ]. fillna ( 'Cat logo' , inplace = True ) 1 2 #drop_duplicates: dados duplicados devido ao desacordo em releaase_year df_netflix . drop_duplicates ([ 'title' ], keep = 'first' , inplace = True ) Ab a ca 07/03/2021 Um g ia di e a a lim a e e a a dad em P h F a k A d ade Ma de 2021 R m ci cia de dad h :// a d da a cie ce.c m/a- aigh f a d-g ide- -clea i g-a d- e a i g-da a-i - h -8c82f209ae33 15/16 como fi para encontrar os melhores filmes da Netfli e da Disne para aprender uma l ngua estrangeira (projetos de PNL) O melhore filme para aprender ma líng a e rangeira de acordo com a ciência de dado A a a á á a cab á á . D c b a a 3000 a a a a ã ... a a a a c c .c Alguns projetos em que reuni dados do mundo real são os seguintes: E co ma a pagar $ 180 / ano por ma ferramen a de apo a l cra i a . E e ano e con r í m em P hon C c a a c a a a a a a b c Pa a S . . a a .c Ganhe dinheiro com P hon - The Spor Arbi rage Projec C c a a a a a c a b a a. . a a .c O c digo o á de a análi e e á di oní el no me Gi h b . I c a- T Va ab P T a Da a Sc c T a a a - a , Va ab c a T a Da a Sc c : a á c a a a c a cê ã . Dê a a a. R c ba b a O a ã a a a a a b a@ a .c . V cê ã ? Ab a ca 07/03/2021 Um g ia di e a a lim a e e a a dad em P h F a k A d ade Ma de 2021 R m ci cia de dad h :// a d da a cie ce.c m/a- aigh f a d-g ide- -clea i g-a d- e a i g-da a-i - h -8c82f209ae33 16/16 C ê c a Da P ã T c a E caçã I ê c a a c a S b A aJ c Ob a a ca M Ab a ca
Compartilhar