Como analisar o mercado do Photo Studio com Python (3/3). Analytics

Todo mundo que abre seu próprio negócio quer adivinhar o momento perfeito de abertura, encontrar o local perfeito e tomar medidas precisas e eficazes para garantir que o negócio sobreviva e cresça. Encontrar parâmetros ideais é impossível, mas as ferramentas de análise estatística ajudam a avaliar as melhores oportunidades.



As fontes abertas contêm uma grande quantidade de informações úteis. Coletar, armazenar e analisar corretamente o ajudará a encontrar as melhores oportunidades de negócios.



Um grupo de jovens empresários considerou a possibilidade de abrir seu próprio estúdio fotográfico em Moscou. Eles precisavam descobrir:



  • Qual é a situação geral do mercado de estúdio fotográfico: crescendo, estável ou caindo?
  • qual a sazonalidade do mercado?
  • quanto eles podem ganhar?
  • onde é melhor abrir os corredores?
  • quanto investir no projeto?
  • quão forte é a competição no mercado?


Um analisador simples , um banco de dados e as análises fornecidas neste artigo os ajudaram a responder a essas e muitas outras perguntas .







No primeiro artigo, examinamos a análise do site agregador de estúdio fotográfico ugoloc.ru e carregamos informações gerais sobre estúdios fotográficos, salas e dados sobre reserva de quartos.



No segundo artigo, consideramos gravar os dados recebidos no banco de dados e ler os dados do banco de dados, e também configurar a operação de análise de acordo com as informações no banco de dados.



Neste artigo, faremos uma análise simples dos dados coletados.



Você pode encontrar um projeto concluído com exemplos de tabelas do banco de dados, tabelas intermediárias, gráficos, comentários adicionais na minha página no github .



Que instruções de análise usaremos



  • definir a dinâmica de abertura de estúdios fotográficos;
  • calcular a rentabilidade dos estúdios fotográficos em função do mês de abertura;
  • determinar a sazonalidade do negócio;
  • calcular o rendimento médio por sala, bem como o número ideal de salas do estúdio fotográfico;
  • investigar a dependência da lucratividade da localização do estúdio fotográfico;
  • descobrir o número de salas de estúdios concorrentes;
  • calcular a influência de outros parâmetros na receita, como altura do teto, área do hall, preços de reserva;
  • considere outras direções possíveis de análise.


Descarregando dados do banco de dados



Para descarregar, faça o seguinte:



estabelecendo uma conexão com a base
directory = './/'
conn = sqlite3.connect(directory + 'photostudios_moscow1.sqlite')
cur = conn.cursor() 




upload de dados pelo estúdio
studios = db_to_studios(conn)
studios




pelos corredores
halls = db_to_halls(conn)
halls




na reserva
booking = db_to_booking(conn)
booking




saímos dos estúdios com datas de abertura e excluímos camarins da lista de corredores
studios = studios[[x.year > 0 for x in studios['established_date']]]
halls = halls[halls['is_hall'] == 1]




Dinâmica de abertura de estúdios fotográficos por ano



Vamos construir um histograma de frequência de estúdios de fotografia abrindo para anos diferentes. Para fazer isso, calculamos o número de períodos (anos) e construímos um histograma.



traçar um histograma
num_bins = np.max(studios['established_date']).year - np.min(studios['established_date']).year + 1
plt.hist([x.year for x in studios['established_date']], num_bins)
plt.show()






No histograma, vemos um claro crescimento de novos estúdios fotográficos de ano para ano. Esse padrão não nos diz sobre o crescimento real do mercado em 2 vezes ao ano, mas sim sobre o crescimento do próprio agregador.



Esse fato nos fala da necessidade de dividir os estúdios em 2 categorias: cadastrados no agregador ao abrir um estúdio fotográfico ("novo") e depois de muito tempo ("antigo"). Esta será nossa próxima tarefa.



Identificando novos estúdios fotográficos



Qual estúdio fotográfico pode ser considerado novo? Aquela que está apenas sendo promovida e conquistando clientes. Uma análise visual dos calendários de reserva desde o momento da inauguração mostra que o estúdio está conquistando um fluxo constante de clientes em poucos meses.



Acontece que para distinguir o novo estúdio fotográfico do antigo (que não se juntou imediatamente ao agregador), é necessário comparar a receita do primeiro semestre a partir do momento da "abertura" com o mesmo período um ano depois. A receita dos novos estúdios deve crescer significativamente ao longo do ano, enquanto a antiga deve permanecer no mesmo patamar.



Primeiro, vamos combinar todas as tabelas e deixar apenas as horas reservadas
# merge all tables
data = (booking
         .merge(halls, left_on = 'hall_id', right_on = 'hall_id', how = 'inner')
         .merge(studios, left_on ='studio_id', right_on = 'studio_id', how = 'inner')
        )
data = data[data['is_working_hour'] == 1]
data['date'] = pd.to_datetime(data['date'])
data




Em seguida, calculamos o rendimento na primeira metade do mês de trabalho do estúdio fotográfico
first_month = (data[data['date'] <= [x + datetime.timedelta(days = 15) for x in data['established_date']]]
               .loc[:, ['studio_id', 'price', 'duration']]
              )
first_month['income'] = first_month['price'] * first_month['duration']
first_month = first_month.groupby('studio_id').agg(np.sum)
first_month




Em meio mês após um ano
month_after_year = (data[(data['date'] >= [x + datetime.timedelta(days = 365) for x in data['established_date']])
                         & (data['date'] <= [x + datetime.timedelta(days = 365 + 15) for x in data['established_date']])
                        ]
                    .loc[:, ['studio_id', 'price', 'duration']]
                   )
month_after_year['income'] = month_after_year['price'] * month_after_year['duration']
month_after_year = month_after_year.groupby('studio_id').agg(np.sum)
month_after_year




Vamos dividir os indicadores em um ano por outros semelhantes na abertura
month_diff = (month_after_year.merge(first_month, left_on = 'studio_id', right_on = 'studio_id', how = 'inner')
              .merge(halls.groupby('studio_id').count()
                     , left_on = 'studio_id', right_on = 'studio_id', how = 'inner')
             )[['income_x', 'income_y', 'is_hall']]
month_diff['income_diff'] = (month_diff['income_x'] / month_diff['income_y']) ** (1 / month_diff['is_hall'])
month_diff.sort_values('income_diff')




Recebeu a taxa de crescimento da renda depois de um ano. O indicador para diferentes estúdios é distribuído de 0,75 a 2,1 sem saltos bruscos. Isso sugere que o estúdio pode se conectar ao agregador imediatamente após a abertura, após uma semana, mês, ano, etc.



Para determinar novos estúdios fotográficos, consideramos o valor condicional da taxa de crescimento da renda no valor mediano: 1,18. Essa. se a receita de um estúdio fotográfico no ano cresceu mais de 18%, então consideraremos este estúdio fotográfico como novo. Havia 22 desses estúdios.



Em que mês é melhor abrir um estúdio fotográfico?



Calculamos os estúdios fotográficos que se registraram no agregador logo após a abertura. Portanto, o dia de abertura real e o dia de abertura, de acordo com nossos dados, serão considerados iguais para esses estúdios.



Para o cálculo, tomaremos novos estúdios fotográficos, calcularemos o rendimento como a soma dos preços de reserva de todas as horas reservadas, agruparemos por halls (tendo em conta o mês da sua abertura), calcularemos o rendimento médio anual por meses de abertura.



Cálculo do rendimento médio do ano em função do mês de abertura
new = studios['is_new'].reset_index().merge(data, left_on = 'studio_id', right_on = 'studio_id', how = 'inner')
new = new[new['is_new'] == 1]
new = new[new['date'] <= [x + datetime.timedelta(days = 365) for x in new['established_date']]]
new['est_year'] = [x.year for x in new['established_date']]
new['est_month'] = [x.month for x in new['established_date']]
new['income'] = new['price'] * new['is_booked']
mean_income = (new
 .groupby(['hall_id', 'est_year', 'est_month']).agg('sum')['income'].reset_index()
 .groupby('est_month').agg('mean')['income']
plt.bar(range(1, 12), mean_income)
plt.show()
)








O histograma mostra uma relação clara:



  • os melhores meses para abrir um estúdio fotográfico são no início do ano (janeiro a abril)
  • também bons meses para abrir são setembro-outubro;
  • os piores meses são maio-junho.


Será interessante comparar esses dados com a sazonalidade do mercado.



Determinação da sazonalidade do negócio



Sazonalidade - variação do número de pedidos em função do período. Vamos analisar a sazonalidade anual.



Para fins de cálculo, vamos pegar os estúdios que estavam abertos até 2018 e ver suas reservas para 2018-2020. A receita do estúdio é definida como a soma dos preços das horas reservadas. A seguir, calculamos a renda total de todos os estúdios para cada mês do período selecionado.



Cálculo de sazonalidade
season = data[(data['open_date'] < '2018-01-01') & (data['date'] > '2018-01-01')]
season['income'] = season['price'] * season['duration']
season['year'] = [x.year for x in season['date']]
season['month'] = [x.month for x in season['date']]
incomes = season.groupby(['year', 'month']).agg(np.sum)['income']
incomes = incomes[incomes.index]




Plotagem
incomes = incomes[: -3]
plt.figure(figsize = (20, 10))
plt.plot([str(x[0]) + '-' + str(x[1]) for x in incomes.index], incomes)
plt.xticks(rotation=60) 
plt.grid()
plt.show()








O gráfico mostra uma sazonalidade claramente pronunciada: maior número de pedidos de outubro a abril e queda acentuada de maio a setembro. A sazonalidade se encaixa na lógica do negócio. No verão, as pessoas tiram fotos na rua, nos parques. No inverno, isso não é possível e você deve organizar sessões de fotos em ambientes fechados. A sazonalidade está ligada a isso: no verão são poucos os clientes, no inverno são muitos. O pico de pedidos é em dezembro. Isso provavelmente se deve ao ano novo e à sensação de feriado que você deseja capturar em uma fotografia.



Os melhores meses para abrir são sazonais. É melhor abrir um estúdio durante a temporada ou um mês antes de seu início. No período de maio a agosto, o estúdio não deve ser inaugurado, pois entrar na baixa temporada.



Cálculo de lucratividade do Hall



Um indicador importante para a abertura de uma empresa é a receita de um cômodo.



Para calcular, agrupamos a renda por quarto para cada mês, excluímos 2020 como um ano anômalo devido à quarentena e examinamos a seleção de renda usando a função .describe ().



Cálculo da rentabilidade de 1 salão
hall_income = season.groupby(['studio_id','hall_id', 'year', 'month']).agg(sum)['income'].reset_index()
hall_income = hall_income[hall_income['year'] < 2020]
hall_income['income'].describe()




count       648.000000
mean     184299.691358
std      114304.925311
min           0.000000
25%       95575.000000
50%      170350.000000
75%      256575.000000
max      617400.000000
Name: income, dtype: float64


Renda recebida por salão em rublos.



A partir dos dados em percentis, pode-se ver que a renda de metade dos corredores está na faixa de 95.000 rublos. até 256.000 rublos. com um valor médio de 170.000 rublos.



A partir dos dados da média e do desvio padrão, vemos que, de acordo com a regra de 1 sigma, dois terços dos corredores chegam a 70.000 rublos. até RUB 300.000 do meio de 184.000 rublos.



Acontece que o salão médio pode contar com uma renda de 170.000 a 180.000 rublos. ± 80.000 rublos



Esse spread tão grande se deve à influência de outros fatores, que tentaremos determinar no futuro.



Quantas salas existem para abrir em um estúdio fotográfico?



Para o cálculo, vamos calcular a rentabilidade média mensal de cada sala, calcular a rentabilidade média de uma sala por estúdio fotográfico, calcular o número de salas em um estúdio fotográfico e agrupar os dados pelo número de salas, calculando a rentabilidade média por sala.



Cálculo da rentabilidade do salão em função do número de salas do estúdio fotográfico
(hall_income
 .groupby(['studio_id', 'hall_id']).agg('mean').reset_index()
 .groupby('studio_id').agg(['count', 'mean'])['income']
 .groupby('count').agg('mean')
)




mean
count	
1	134847.916667
2	146531.944444
3	300231.944444
4	222202.604167


Recebeu uma rentabilidade média mensal de 1 salão dependendo do número de salas em um estúdio fotográfico. Vamos notar a regularidade: quanto mais corredores, mais rentabilidade. Rentabilidade máxima para estúdios com 3 quartos.



Este fenômeno se deve ao fato de que usando uma sala do estúdio fotográfico, o cliente pode ver outra sala e imediatamente reservá-la. Assim, uma sala do estúdio fotográfico "promove" outras.



Dependência de renda da localização do corredor



A localização do pavilhão pode afetar muito a rentabilidade: no centro, os pavilhões estarão mais acessíveis aos clientes, o que significa que a receita será maior. Vamos verificar a hipótese.



Para o cálculo vamos calcular o rendimento médio mensal do hall, agrupar de acordo com o “metro” e ordenar por ordem crescente.



Rentabilidade do salão dependendo da distância do centro
data['income'] = data['price'] * data['duration']
data['year'] = [x.year for x in data['date']]
data['month'] = [x.month for x in data['date']]
(data
 .groupby(['hall_id', 'metro', 'year', 'month']).agg('sum')['income'].reset_index()
 .groupby(['hall_id', 'metro']).agg('mean')['income'].reset_index()
 .groupby('metro').agg('mean')['income'].sort_values()
)[-59:]




Obtivemos os seguintes dados:



metro
                               5016.666667
                             10485.264378
                                      11925.000000
/                    18116.666667
,                        19000.000000
                                    21963.333333
                                  30667.051729
                                 31031.250000
                                   37787.500000
/                       39357.142857
                                  44354.375000
                                  45888.888889
                         46566.666667
                                    48541.666667
. ,              49086.503623
                                55340.659341
 ,  ,          55944.444444
. / .            59771.111111
                               66780.000000
                                    66847.058824
                                  67692.545788
.                                 70090.341880
.                                70337.676411
,                         72974.494949
                                   79987.083333
                         88800.000000
                                   95550.000000
                              98326.086957
                                  99216.279070
                                              99925.000000
                         102835.622784
. , . , . \    104956.521739
                        111050.684459
                                     111090.000000
                                    111909.090909
                                   116426.892180
                        117450.000000
                                   118382.236364
                                      122626.500000
,                      123258.518519
-                        124557.894737
,                           126300.000000
                                  129222.916667
                                   135281.642512
,                     138945.454545
                                      152246.883469
,                      168484.500000
.                           169079.381010
.                                172618.798439
                             173777.659900
                                  178254.545455
                                         181041.818182
                                      187283.444198
                              189140.857975
                      250975.000000
, ,             252685.714286
,                  264164.473684
-                              277162.791991
                                  556621.746032
Name: income, dtype: float64


Observe que deixei os dados do metrô como estão. Para uma imagem mais precisa, eles precisam ser trazidos para um formato comum, por exemplo, "Baumanskaya, Elektrozavodskaya", "Estação de metrô Elektrozavodskaya" e "Electrozavodskaya" devem ser escritos em um nome.



A partir dos dados, vemos que em áreas com imóveis caros, como Maryina Roshcha, Novye Cheryomushki, Krylatskoye, a lucratividade por salão é maior.



Quantas salas os estúdios concorrentes têm



Quantos halls os estúdios do mercado têm? Para responder a esta pergunta, vamos anexar uma mesa com corredores à mesa do estúdio, agrupá-la por estúdio, contando o número de corredores, e construir um histograma de frequência.



Cálculo do número de salas nos estúdios
hall_num = studios.merge(halls, left_on='studio_id', right_on='studio_id').groupby('studio_id').agg('count')['is_hall']

plt.hist(hall_num, range(np.min(hall_num), np.max(hall_num)+1))
plt.show()
hall_num.describe()








count    105.000000
mean       2.685714
std        2.292606
min        1.000000
25%        1.000000
50%        2.000000
75%        3.000000
max       13.000000


A partir dos dados obtidos, vemos que a maioria dos estúdios fotográficos (mais de 75%) não possui mais de 3 salas. Em todo o mercado, via de regra, os estúdios não possuem mais do que 5 salas.



Impacto de outros parâmetros na receita do estúdio



Altura do teto



As fotos exigem muita luz, e as grandes janelas em uma sala com tetos altos fornecem muita luz natural. Além disso, quanto mais altos os tetos, mais difusa e uniforme a luz atinge o chão. Portanto, a altura do teto pode afetar a lucratividade do estúdio fotográfico. Vamos verificar essa hipótese.



Vamos calcular a renda média mensal de cada corredor mantendo os dados da altura do forro, depois calcular a renda média em função da altura do forro e montar um gráfico.



Receita do salão dependendo da altura do teto em metros
halls_sq_ceil = (data
 .groupby(['hall_id', 'ceiling', 'square', 'year', 'month']).agg('sum')['income'].reset_index()
 .groupby(['hall_id', 'ceiling', 'square']).agg('mean')['income'].reset_index()
)
plt.bar(halls_sq_ceil.groupby('ceiling').agg('mean')['income'].index[:-2],
        halls_sq_ceil.groupby('ceiling').agg('mean')['income'][: len(halls_sq_ceil) - 2]
       )
plt.show()








Nos dados obtidos, vemos que até 6 metros existe uma dependência direta da rentabilidade do estúdio fotográfico com a altura do teto. A altura ideal é de 5 a 6 metros.



Área do corredor



Hipótese: quanto maior a área do salão, mais receita ele traz.



Testamos a hipótese. Usamos os cálculos anteriores, calculamos a rentabilidade média dependendo da área, construímos um gráfico.



Receita do salão dependendo de sua área
square = halls_sq_ceil.groupby('square').agg('mean')['income']
plt.bar(square.index[:-3],
        square.iloc[: len(square) - 3]
       )
plt.show()








Um padrão claro é visível nos gráficos: quanto maior a área, mais o corredor traz.



Preço de reserva



Hipótese: existe um preço ideal para os salões que os clientes pagam por quase todos os salões. Os clientes estão dispostos a pagar um preço mais alto exclusivamente pela alta qualidade.



Para testar a hipótese, primeiro considere o nível de preço atual. Para isso, vamos agrupar a tabela geral de reservas por quarto, preço, ano, mês e somar a receita. Em seguida, vamos agrupar por quarto e preço de reserva, calculando a renda média. A seguir, vamos agrupar por preço, calculando a renda média. Recebeu uma renda média mensal por estúdio, dependendo do preço de reserva definido



Rentabilidade média mensal do estúdio, dependendo do preço de reserva do quarto
price = (data
 .groupby(['hall_id', 'price', 'year', 'month']).agg('sum')['income'].reset_index()
 .groupby(['hall_id', 'price']).agg('mean')['income'].reset_index()
 .groupby('price').agg('mean')['income']
)




Quantos quartos têm um preço específico por hora de aluguel
plt.figure(figsize = (20, 10))
plt.hist(price.iloc[: len(price) - 5].index)
plt.show()








Pelo histograma de frequência, vemos que a maioria dos estúdios definiu um preço de aluguel de 500 a 2.000 rublos. Abaixo de RUB 500 - uma raridade. O preço máximo do aluguel do salão é de 3.500 rublos.



Gráfico da dependência da renda média mensal do valor do aluguel do salão
price = price[price > 10000]
plt.figure(figsize = (20, 10))
plt.scatter(price.index, price)
plt.show()








O gráfico mostra que até 2.000 rublos. há uma relação direta e clara: quanto mais alto o preço da reserva, mais o estúdio ganha. A um preço acima de 2.000 rublos. a renda do quarto pode ser baixa ou alta. Aparentemente, mais de 2.000 rublos. os clientes estão dispostos a pagar apenas pela alta qualidade dos serviços prestados: seja por uma localização conveniente, ou por equipamentos, ou por uma grande área, ou por um interior de alta qualidade, etc.



Outras áreas de análise de mercado



Análise de equipamentos



O site ugoloc.ru contém informações sobre os equipamentos dos estúdios fotográficos: a presença de fundos coloridos, a marca dos flashes, etc. Os equipamentos dos estúdios fotográficos também podem afetar a rentabilidade, portanto, para completude da análise, este fator também deve ser levado em consideração.



Nem todos os estúdios podem indicar a presença de equipamento adicional. Portanto, a avaliação da influência desse fator pode ser imprecisa.



Análise da influência de vários parâmetros na receita



Os parâmetros não afetam a renda isoladamente. Por exemplo, espaço e preço de reserva estão ligados e juntos afetam a lucratividade geral de um estúdio. Portanto, é mais razoável considerar sua influência juntos. A influência de vários parâmetros deve ser considerada com base nas especificações das solicitações do cliente.



Coleta de dados aprimorada



Os estúdios de fotografia em ugoloc.ru representam menos de um terço do mercado em termos de quantidade. Não é possível estimar a participação dos estúdios neste site agregador por receita e segmento de mercado. Para uma imagem mais precisa, vale a pena coletar dados do AppEvent, Google Calendars e, possivelmente, de aplicativos de reserva personalizados.



Despesas contábeis



Você deve ter notado que muitas vezes não havia despesas suficientes para completar o quadro. Por exemplo, quanto maior for a área do corredor, maior será a receita. A conclusão é, claro, boa, mas à medida que a área cresce, o custo do aluguel do prédio aumenta. Portanto, certamente será útil registrar o aumento dos custos de aluguel no cronograma. A lucratividade do projeto está oculta na proporção ótima de receitas e despesas para um parâmetro específico.



O custo do reparo também depende da área: quanto maior a área, mais caro será o reparo.



Com o aumento do número de pavilhões, os custos de pessoal por pavilhão diminuem, uma vez que 1 administrador pode servir a 1 sala e 3.



Análise da distância do metrô



Ao avaliar o impacto da localização do estúdio na receita do corredor, um fator importante não contabilizado é a distância do metrô. Você terá que colocá-lo manualmente, ou aqueles que estão familiarizados com a API do Google podem tentar automatizar essa ação.



Distância dos concorrentes



Na maioria das vezes, os estúdios estão localizados próximos uns dos outros. São cerca de 40 só na Elektrozavod.Há a hipótese de que a proximidade de outros estúdios fotográficos aumenta a rentabilidade. O local (edifício / centro de negócios) pode ser familiar aos clientes e eles podem confiar nele, o que terá um efeito positivo em todos os estúdios fotográficos do local.



Carga de trabalho de estúdios fotográficos



Separadamente, você pode investigar a carga de trabalho dos estúdios fotográficos:



  • que porcentagem do horário de funcionamento do salão são reservas;
  • como as reservas estão relacionadas com o dia da semana (spoiler: reservam com mais frequência ao fim-de-semana);
  • se há dias não marcados (nos quais o administrador não pode ir trabalhar);
  • que horas são reservadas com mais frequência (especialmente interessante de ver nos dias de semana)
  • etc.


Estúdios fotográficos de última geração na baixa temporada



Os estúdios fecham com mais frequência no verão, quando não há pedidos. Ao mesmo tempo, o número de pedidos de alguns estúdios fotográficos não cai muito. Quais são as vantagens dos populares estúdios fora de temporada? Esta é uma área separada para consideração.



Análise de lucratividade do concorrente



Tendo informações sobre o custo do aluguel das instalações de um estúdio fotográfico e salários médios do pessoal, pode-se avaliar a situação financeira dos concorrentes. Pode ser que alguns estúdios estejam prestes a fechar. Assim, você pode identificar seus erros e tentar evitá-los.



Da mesma forma, você pode explorar as experiências dos estúdios fotográficos mais lucrativos e aproveitá-las em seu estúdio.



Estágios de análise



A análise acima é a primeira etapa para dar uma imagem aproximada do mercado. Para uma análise posterior, o cliente precisa decidir qual estúdio deseja abrir, qual segmento de preço, qual localização possível, qual é o preço do aluguel, quais equipamentos, etc.



Ideal: identifique várias opções de aluguel. Em seguida, a área, a altura dos tetos, o número aproximado de corredores, os custos e os competidores mais próximos serão determinados.



Nesse caso, a análise pode ser realizada de forma mais substantiva e precisa.



Resultado



Em uma série de artigos, vimos como coletar dados de fontes abertas, salvá-los em um banco de dados e analisá-los. O resultado do trabalho foi uma compreensão geral do mercado de serviços de estúdio fotográfico.



Os cálculos acima podem ser aplicados:



  • na criação de um plano de negócios do lado da receita. E estes serão dados estatisticamente confirmados;
  • na avaliação da viabilidade e rentabilidade do projeto, comparando receitas e despesas para diferentes opções de abertura;
  • operação de estúdios fotográficos. Muitos estúdios fotográficos estão ociosos sem pedidos ou operam com prejuízo. Isso significa que eles estão fazendo algo errado. A análise acima pode ajudar os estúdios a identificar as causas de sua condição.


Eu gostei de fazer este projeto.



Decidi compartilhar minha experiência que pode ser útil para você.



Quão úteis foram as informações nesses três artigos?



Compartilhe sua opinião.



Você pode encontrar o projeto concluído na minha página do github .



All Articles