def histograma(): # 1º - Definindo a variável "df" (dataframe) que receberá as informações que está no csv # 2º - Utilizando a biblioteca pandas (pd) lerá o csv "new_3.csv" e armazenará apenas a coluna "ouvintes" no dataframe df = df_inicial['ouvintes'] # Calcula número de ouvintes no dataframe somaouvintes = df.sum() # Cria uma lista com a porcentagem do numero de ouvintes de cada artista porc = (df) / somaouvintes # Plotando o gráfico # 1º - Definindo a variável "fig" onde será armazenado o gráfico # 2º - Utiliza a função histograma no módulo "px" da biblioteca plotly fig = px.histogram( # Informa que a origem dos dados, não especificados, vêm do dataframe "df" x=df, # O eixo x se refere ao número de ouvintes y=porc, # O eixo y se refere à porcentagem de artistas com certo número de ouvintes nbins=30, # Divide o total de ouvintes em 30 intervalos color_discrete_sequence=['#c8d4d3' ]) # Muda a cor das barras do gráfico # Modificando o layout do gráfico "fig" fig.update_layout( lm.layout_gps('Histogram: Number of Listeners per Artist', 'percentage of artists', 'number of listeners')) fig.update_layout(yaxis_tickformat='.2%', margin=dict(t=100)) # Mostra o gráfico construído return fig
def pais_artistas(pais): df = df_inicial[['artistas', 'paises', 'scrobbles']] df = df[df['paises'] == pais].sort_values(by = 'scrobbles', ascending= False).dropna() df['porcentagens'] = df['scrobbles']/df['scrobbles'].sum() trace = go.Bar(x= df['artistas'].head(10), y= df['porcentagens'].head(10)) data = [trace] layout = lm.layout_gps('Artistas mais famosos: ' + pais.title(), 'artistas', 'quantidade de scrobbles') fig = go.Figure(data=data, layout=layout) fig.show()
def genero(estilo): df = df_inicial[['paises', 'ouvintes', 'estilos']] df = df.sort_values(by='ouvintes', ascending=False) # LÊ O CSV, DETERMINA AS COLUNAS A SEREM UTILIZADAS E ORDENA POR OUVINTES x = estilo uk = df[df['estilos'] == x].dropna() # CRIA UM DATA FRAME COM APENAS OS DADOS DO ESTILO DESEJADO E RETIRA OS NaN group = uk[['ouvintes' ]].groupby(uk['paises']).sum().sort_values(by='ouvintes', ascending=False) group['paises'] = group.index # SOMA TODOS OS OUVINTES, SEPARANDO-OS POR PAÍSES if 'outro' in group['paises'][:10]: y = group.loc['outro'] group = group.drop('outro') group = group.append(y) # MOVE O PAÍS "OUTRO" PARA O FINAL DO DATAFRAME total = group['ouvintes'].sum() group['porcentagem'] = (group['ouvintes'] / total) # CALCULA A PORCENTAGEM DE CADA PAÍS E CRIA UMA COLUNA COM ESTAS PORCENTAGENS others = group['porcentagem'][11:].sum() group['porcentagem'][10] = others # SOMA A PORCENTAGEM DE TODOS PAÍSES A PARTIR DO 11° RELEVANTE E ADICIONA UMA LINHA COM ESTA PORCENTAGEM group_top = group.head(n=11) group_top['paises'][10] = 'others' # PEGA OS PRIMEIROS 10 PAÍSES MAIS RELEVANTES E A SOMA DAS OUTRAS PORCENTAGENS trace = go.Bar(x=group_top['paises'], y=group_top['porcentagem'], marker={'color': '#c8d4d3'}) # CRIA O GRÁFICO COM OS PAÍSES E A PORCENTAGEM DE CADA UM E DEFINE SUA COR layout = lm.layout_gps( 'Percentage of Listeners by Countries: ' + x.title(), 'listeners percentage', ) # MUDA O LAYOUT DO GRÁFICO data = [trace] fig = go.Figure(data=data, layout=layout) return fig
def scrobbles(): df = df_inicial[['paises', 'scrobbles']] df = df.values.tolist() # cria uma lista com a quantidade de scrobbles de cada país lista_s = list() for pais in lista_p: scrobbles = 0 for i in range(len(df)): if df[i][0] == pais: scrobbles += df[i][1] lista_s.append(scrobbles) # calcula a porcentagem de cada país com base nos scrobbles total_s = sum(lista_s) porcentagem = [i / total_s for i in lista_s] # cria a lista final com os países e porcentagens e ordena lista = [[pais, porcentagem] for pais, porcentagem in zip(lista_p, porcentagem)] lista = sorted(lista, key=lambda x: x[1], reverse=True) # retira o 'outro' das 10 primeiras posições e coloca no final da lista lista_t = lista[:10] for i in range(len(lista_t)): if lista_t[i][0] == 'outro': outro = lista[i] del (lista[i]) lista.append(outro) # calcula e coloca o "outros" na lista final lista_b = lista[11:] outros = 0 for i in range(len(lista_b)): outros += lista_b[i][1] lista.insert(10, ['others', outros]) # cria o gráfico trace = go.Bar(x=([lista[i][0] for i in range(11)]), y=([lista[i][1] for i in range(11)]), marker={'color': '#c8d4d3'}) # cria e muda o layout layout = lm.layout_gps('Proportion of all Scrobbles by Country', 'listeners percentage', 'countries') data = [trace] fig = go.Figure(data=data, layout=layout) return fig
def scrobbles(): df = df_inicial[['paises', 'scrobbles']] df = df.groupby(by='paises').sum() df = df.sort_values(by='scrobbles', ascending=False) # LÊ O CSV, DETERMINA AS COLUNAS A SEREM UTILIZADAS E # SOMA OS VALORES DE SCROBBLES E OUVINTES E ORDENA O DATAFRAME POR SCROBBLES soma = df['scrobbles'].sum() df['porcentagem'] = (df['scrobbles'] / soma) df['paises'] = df.index # CALCULA A PORCENTAFEM DE SCROBBLES POR PAÍS if 'outro' in df['paises'][:10]: y = df.loc['outro'] df = df.drop('outro') df = df.append(y) # MOVE O PAÍS "OUTRO" PARA O FINAL DO DATAFRAME others = df['porcentagem'][11:].sum() df['porcentagem'] = df['porcentagem'][0:11] df['porcentagem'][10] = others df['paises'][10] = 'others' df_top = df.head(n=11) # SOMA A PORCENTAGENS DE SCROBBLES A PARTIR DO 11° E ARMAZENA NA POSIÇÃO 11 DA COLUNA "PORCENTAGEM" # E PEGA APENAS OS 10 PRIMEIROS PAÍSES E A SOMA trace = go.Bar(x=df_top['paises'], y=df_top['porcentagem'], marker={'color': '#c8d4d3'}) # CRIA O GRÁFICO E DETERMINA SUA COR layout = lm.layout_gps('Proportion of all Scrobbles by Country', 'listeners percentage', 'countries') # EDITA O LAYOUT DO GRÁFICO data = [trace] fig = go.Figure(data=data, layout=layout) return fig
def genero(estilo): df = df_inicial[['paises', 'estilos', 'ouvintes']] df = df.values.tolist() # cria uma lista com apenas o estilo determinado x = estilo df2 = list() for i in range(len(df)): if df[i][1] == x: df2.append(df[i]) # cria uma lista de países paises = list() for i in range(len(df2)): if df2[i][0] not in paises: paises.append(df2[i][0]) # cria uma lista somando os ouvintes por país lista_o = list() for pais in paises: ouvintes = 0 for i in range(len(df2)): if pais == df2[i][0]: ouvintes += df2[i][2] lista_o.append(ouvintes) # calcula a porcentagem de cada estilo total_o = sum(lista_o) porcentagem = list() for i in lista_o: porcentagem.append(i / total_o) # cria uma lista ordenada dupla com o nome do país e a quantidade de ouvintes lista = ([[pais, porc] for pais, porc in zip(paises, porcentagem)]) lista = sorted(lista, key=lambda x: x[1], reverse=True) # retira e joga o 'outro' pro final da lista lista_top = lista[:10] for i in range(len(lista_top)): if 'outro' == lista[i][0]: outro = lista[i] del (lista[i]) lista.append(outro) # calcula a porcentagem do 'outros' e adiciona à posição 10 da lista lista_b = lista[11:] outros = 0 for i in range(len(lista_b)): outros += lista_b[i][1] lista.insert(10, ['others', outros]) # cria o gráfico trace = go.Bar(x=[lista[i][0] for i in range(11)], y=[lista[i][1] for i in range(11)], marker={'color': '#c8d4d3'}) # muda o layout do gráfico layout = lm.layout_gps( 'Percentage of Listeners by Countries: ' + x.title(), 'listeners percentage', ) data = [trace] fig = go.Figure(data=data, layout=layout) return fig
def pais(pais): df = df_inicial[['paises', 'estilos', 'ouvintes']] df = df.values.tolist() # cria uma lista com apenas o país determinado x = pais df2 = list() for i in range(len(df)): if df[i][0] == x: df2.append(df[i]) # cria uma lista com os estilos lista_e = list() for i in range(len(df2)): if df2[i][1] not in lista_e: lista_e.append(df2[i][1]) # cria uma lista com os ouvintes de cada estilo lista_o = list() for estilo in lista_e: ouvintes = 0 for i in range(len(df2)): if df2[i][1] == estilo: ouvintes += df2[i][2] lista_o.append(ouvintes) # calcula a porcentagem de cada estilo total_o = sum(lista_o) porcentagem = list() for i in lista_o: porcentagem.append(i / total_o) # cria uma lista com os estilos e ouvintes lista = list() for estilo, porc in zip(lista_e, porcentagem): lista.append([estilo, porc]) lista = sorted(lista, key=lambda x: x[1], reverse=True) # retira o 'outro' das 10 primeiras posições e coloca no final da lista lista_t = lista[:10] for i in range(len(lista_t)): if lista_t[i][0] == 'outro': outro = lista[i] del (lista[i]) lista.append(outro) # calcular e colocar o "outros" na lista final lista_b = lista[11:] outros = 0 for i in range(len(lista_b)): outros += lista_b[i][1] lista.insert(10, ['others', outros]) # cria o gráfico trace = go.Bar(x=([lista[i][0] for i in range(11)]), y=([lista[i][1] for i in range(11)]), marker={'color': '#c8d4d3'}) # cria e muda o layout layout = lm.layout_gps( 'Percentage of Listeners by Genres: ' + x.title(), 'listeners percentage', ) data = [trace] fig = go.Figure(data=data, layout=layout) return fig
# retira o 'outro' das 10 primeiras posições e coloca no final da lista lista_t = lista[:10] for i in range(len(lista_t)): if lista_t[i][0] == 'outro': outro = lista[i] del (lista[i]) lista.append(outro) # calcular e colocar o "outros" na lista final lista_b = lista[11:] outros = 0 for i in range(len(lista_b)): outros += lista_b[i][1] lista.insert(10, ['others', outros]) trace = go.Bar(x=([lista[i][0] for i in range(11)]), y=([lista[i][1] for i in range(11)])) # CRIA O GRÁFICO COM OS ESTILOS E A PORCENTAGEM DE CADA UM E DEFINE SUA COR layout = lm.layout_gps('Percentage of Listeners by Genres: ' + pais.title(), 'listeners percentage', '') # MUDA O LAYOUT DO GRÁFICO data = [trace] fig = go.Figure(data=data, layout=layout) fig.show() #%%