Определение перспективного тарифа для телеком компании
Содержание
- 1 Определение перспективного тарифа для телеком компании
- 1.1 Описание проекта
- 1.2 Описание тарифов
- 1.3 Описание данных
- 1.4 Вывод
Описание проекта
Клиентам предлагают два тарифных плана: «Смарт» и «Ультра».
Мне предстоит сделать предварительный анализ тарифов на небольшой выборке клиентов. В моем распоряжении данные 500 пользователей «Мегалайна»: кто они, откуда, каким тарифом пользуются и т.д. за 2018 год. Нужно проанализировать поведение клиентов и сделать вывод — какой тариф лучше, чтобы скорректировать рекламный бюджет, коммерческий департамент компании «Мегалайн» хочет понять, какой тариф приносит больше денег.
Описание тарифов
-
Тариф «Смарт»
- Ежемесячная плата: 550 рублей
- Включено 500 минут разговора, 50 сообщений и 15 Гб интернет-трафика
- Стоимость услуг сверх тарифного пакета:
- минута разговора: 3 рубля
- сообщение: 3 рубля
- 1 Гб интернет-трафика: 200 рублей
-
Тариф «Ультра»
- Ежемесячная плата: 1950 рублей
- Включено 3000 минут разговора, 1000 сообщений и 30 Гб интернет-трафика
- Стоимость услуг сверх тарифного пакета:
- минута разговора: 1 рубль
- сообщение: 1 рубль
- 1 Гб интернет-трафика: 150 рублей
Описание данных
-
Таблица users (информация о пользователях):
- user_id — уникальный идентификатор пользователя
- first_name — имя пользователя
- last_name — фамилия пользователя
- age — возраст пользователя (годы)
- reg_date — дата подключения тарифа (день, месяц, год)
- churn_date — дата прекращения пользования тарифом (если значение пропущено, то тариф ещё действовал на момент выгрузки данных)
- city — город проживания пользователя
- tariff — название тарифного плана
-
Таблица calls (информация о звонках):
- id — уникальный номер звонка
- call_date — дата звонка
- duration — длительность звонка в минутах
- user_id — идентификатор пользователя, сделавшего звонок
-
Таблица messages (информация о сообщениях):
- id — уникальный номер сообщения
- message_date — дата сообщения
- user_id — идентификатор пользователя, отправившего сообщение
-
Таблица internet (информация об интернет-сессиях):
- id — уникальный номер сессии
- mb_used — объём потраченного за сессию интернет-трафика (в мегабайтах)
- session_date — дата интернет-сессии
- user_id — идентификатор пользователя
-
Таблица tariffs (информация о тарифах):
- tariff_name — название тарифа
- rub_monthly_fee — ежемесячная абонентская плата в рублях
- minutes_included — количество минут разговора в месяц, включённых в абонентскую плату
- messages_included — количество сообщений в месяц, включённых в абонентскую плату
- mb_per_month_included — объём интернет-трафика, включённого в абонентскую плату (в мегабайтах)
- rub_per_minute — стоимость минуты разговора сверх тарифного пакета (например, если в тарифе 100 минут разговора в месяц, то со 101 минуты будет взиматься плата)
- rub_per_message — стоимость отправки сообщения сверх тарифного пакета
- rub_per_gb — стоимость дополнительного гигабайта интернет-трафика сверх тарифного пакета (1 гигабайт = 1024 мегабайта)
Вывод
Рекламный бюджет выгоднее всего перераспределить в пользу тарифа ultra, несмотря на то, что его абоненты не покупают дополнительные минуты и смс, в отличие от абонентов тарифа smart. Так же можно заметить, что медианное и среднее значение дохода у абонентов тарифа ultra выше.
В процессе работы, было выявлено, что в целом данные приходят без артефактов и достаточно чистые, за исключением столбца churn_date таблицы users. Я бы предложил при их сборе дополнительно помечать абонентов каким то максимально разумным значением или же условным нулем, чтобы упростить анализ, тем что нет необходимости дополнительно придумывать условные флаги, которые сможет переработать компьютер.К тому же если над подобными данными будут работать несколько сотрудников и каждый из них определит для себя индивидуальный флаг, то в дальнейшем при объединении работ могут появиться баги, которые сложно будет отловить.
Так же исследовав предоставленные данные мы смогли проверить гипотезы. Эти данные помогли нам опровергнуть гипотезу о том, что средняя выручка пользователей разных тарифов равна, а так же с большой вероятностью сказать, что средняя выручка пользователей из Москвы равна выручке пользователей из других регионов.
Кроме того, в процессе анализа мы узнали, что в среднем разница медианных и среднеарифметических значений дохода с разных тарифов отличается ~1000 в пользу тарифа ultra
Проект из обучающих курсов Яндекс. Практикум
Determining a prospective tariff for a Telecom company
Определение перспективного тарифа для телеком компании
Описание проекта
Вы аналитик компании «Мегалайн» — федерального оператора сотовой связи. Клиентам предлагают два тарифных плана: «Смарт» и «Ультра». Чтобы скорректировать рекламный бюджет, коммерческий департамент хочет понять, какой тариф приносит больше денег.
Вам предстоит сделать предварительный анализ тарифов на небольшой выборке клиентов. В вашем распоряжении данные 500 пользователей «Мегалайна»: кто они, откуда, каким тарифом пользуются, сколько звонков и сообщений каждый отправил за 2018 год. Нужно проанализировать поведение клиентов и сделать вывод — какой тариф лучше.
Описание тарифов
Тариф «Смарт»
Ежемесячная плата: 550 рублей
Включено 500 минут разговора, 50 сообщений и 15 Гб интернет-трафика
Стоимость услуг сверх тарифного пакета:
минута разговора: 3 рубля
сообщение: 3 рубля
1 Гб интернет-трафика: 200 рублей
Тариф «Ультра»
Ежемесячная плата: 1950 рублей
Включено 3000 минут разговора, 1000 сообщений и 30 Гб интернет-трафика
Стоимость услуг сверх тарифного пакета:
минута разговора: 1 рубль
сообщение: 1 рубль
1 Гб интернет-трафика: 150 рублей
Обратите внимание: «Мегалайн» всегда округляет вверх значения минут и мегабайтов. Если пользователь проговорил всего 1 секунду, в тарифе засчитывается целая минута.
Путь к файлам:
calls.csv
internet.csv
messages.csv
tariffs.csv
users.csv
Определение перспективного тарифа для телеком компании
Описание проекта.
Клиентам предлагают два тарифных плана: «Смарт» и «Ультра». Чтобы скорректировать рекламный бюджет, коммерческий департамент хочет понять, какой тариф приносит больше денег.
В данном проекте мы выполним предварительный анализ тарифов на небольшой выборке клиентов. В нашем распоряжении данные 500 пользователей «Мегалайна»: кто они, откуда, каким тарифом пользуются, сколько звонков и сообщений каждый отправил за 2018 год. Проведём анализ поведения клиентов и сделаем вывод — какой тариф лучше.
Инструменты:
Python
Pandas
Matplotlib
numpy
SciPy
описательная статистика
проверка статистических гипотез
math
Seaborn
sklearn
машинное обучение
Краткое содержание о проделанной работе:
Оператор мобильной связи выяснил: многие клиенты пользуются архивными тарифами.
Проведен предварительный анализ использования тарифов на выборке клиентов,
проанализировано поведение клиентов при использовании услуг оператора и
рекомендованы оптимальные наборы услуг для пользователей.
Проверены гипотезы о различии выручки абонентов разных тарифов и
различии выручки абонентов из Москвы и других регионов.
Определен выгодный тарифный план для корректировки рекламного бюджета.
Разработана система, способная проанализировать поведение клиентов и предложить пользователям новый тариф.
Данные и выводы
В итоговом заключении делаем вывод о том, что коммерческому департаменту можно рекомендовать скорректировать рекламный бюджет в сторону тарифа «Smart», т.к. по тарифному плану «Ultra» приток выручки намного выше и без рекламных инвестиций при том же объёме использования средств связи, а это говорит, о том что такой тариф выбирают пользователи, которые готовы переплачивать за связь вне зависимости от ежемесячного использования включенных пакетов, такое поведение характерно организациям и бизнесу, а занчит затраты на рекламу могут не принести желаемого результата.
Если проект не открывается, его можно просмотреть по ссылке: Determination_of_a_promising_tariff
-
# Определение перспективного тарифа для телеком компании
-
##### Задача: проанализировать поведение клиентов компании Мегалайн и сделать вывод — какой тариф выгоднее продвигать: Смарт или Ультра.
-
1. Провести первичный анализ данных
-
2. Провести предобработку данных (привести к нужным типам и исправить ошибки)
-
3. Добавить необходимые данные в таблицы (количество сделанных звонков и израсходованных минут разговора по месяцам; количество отправленных сообщений по месяцам; объем израсходованного интернет-трафика по месяцам; помесячную выручку с каждого пользователя)
-
4. Описать поведение клиентов (среднее кол-во сообщений, минут разговора, объем трафика)
-
5. Проверить гипотезы: средняя выручка пользователей тарифов «Ультра» и «Смарт» различается; средняя выручка пользователей из Москвы отличается от выручки пользователей из других регионов
-
## Первичный анализ данных
-
Импортируем необходимые библиотеки:
-
import pandas as pd
-
import matplotlib.pyplot as plt
-
import numpy as np
-
import scipy.stats as st
-
Импортируем данные:
-
calls_data = pd.read_csv(‘/datasets/calls.csv’)
-
internet_data = pd.read_csv(‘/datasets/internet.csv’)
-
messages_data = pd.read_csv(‘/datasets/messages.csv’)
-
tariffs_data = pd.read_csv(‘/datasets/tariffs.csv’)
-
users_data = pd.read_csv(‘/datasets/users.csv’)
-
print(calls_data.info())
-
calls_data.head()
-
print(internet_data.info())
-
internet_data.head()
-
print(messages_data.info())
-
messages_data.head()
-
tariffs_data.head()
-
print(print(users_data.info()))
-
users_data.head()
-
#### Вывод
-
— Обнаружен неверный формат даты во всех таблицах с датами (4шт)
-
— Необходимо округлить время звонков и мегабайты трафика в большую сторону в соответствии с условиями тарифов
-
## Предобработка
-
Добавим в каждую из 3 базовых таблиц с данными колонку с месяцем. Для этого вначале приведем даты к формату datetime:
-
#приводим в формат datetime
-
calls_data[‘call_date’] = pd.to_datetime(calls_data[‘call_date’], format=‘%Y-%m-%d’)
-
messages_data[‘message_date’] = pd.to_datetime(messages_data[‘message_date’], format=‘%Y-%m-%d’)
-
internet_data[‘session_date’] = pd.to_datetime(internet_data[‘session_date’], format=‘%Y-%m-%d’)
-
#добавляем столбец month
-
calls_data[‘month’] = pd.to_datetime(calls_data[‘call_date’]).dt.month
-
messages_data[‘month’] = pd.to_datetime(messages_data[‘message_date’]).dt.month
-
internet_data[‘month’] = pd.to_datetime(internet_data[‘session_date’]).dt.month
-
#округлим в большую сторону звонки и сообщения
-
calls_data[‘duration’] = calls_data[‘duration’].apply(np.ceil).replace(0, 1)
-
internet_data[‘mb_used’] = internet_data[‘mb_used’].apply(np.ceil).replace(0, 1)
-
#в таблице с интернет-трафиком для дальнейшего анализа переведем мб в гб
-
internet_data[‘gb_used’] = (internet_data[‘mb_used’] / 1024)
-
#объединим сообщения и звонки
-
calls_msgs_data = calls_data.merge(messages_data, on=[‘user_id’, ‘month’], suffixes=[‘_calls’, ‘_message’])
-
calls_msgs_data
-
#сделаем pivot для трех таблиц. сгруппируем по user_id и посчитаем кол-во звонков:
-
calls_data_grouped = calls_data.pivot_table(index=[‘user_id’, ‘month’], values=‘duration’,
-
aggfunc=[‘sum’, ‘count’])
-
internet_data_grouped = internet_data.pivot_table(index=[‘user_id’, ‘month’], values=‘gb_used’,
-
aggfunc=[‘sum’])
-
calls_data_grouped.reset_index()
-
calls_data_grouped.columns = [‘calls_duration’, ‘calls_amount’]
-
internet_data_grouped.columns = [‘gb_used’]
-
internet_data_grouped.reset_index()
-
messages_data_grouped = messages_data.pivot_table(index=[‘user_id’, ‘month’], values=‘id’, aggfunc=‘count’)
-
messages_data_grouped.reset_index()
-
messages_data_grouped.columns=[‘messages_amount’]
-
calls_internet_merged = calls_data_grouped.merge(internet_data_grouped, on=[‘user_id’, ‘month’], how=‘left’)
-
telecom_data = calls_internet_merged.merge(messages_data_grouped, on=[‘user_id’, ‘month’], how=‘left’)
-
telecom_data_pvt = telecom_data.pivot_table(index=[‘user_id’, ‘month’])
-
telecom_data_pvt=telecom_data_pvt.reset_index()
-
Добавим к telecom_data информацию о пользователях (предварительно приведя в формат datetime дату регистрации)
-
В таблице total_data увидим помесячно кол-во и длительность звонков, кол-во сообщений и объем использованного трафика для каждого пользователя
-
users_data[‘reg_date’] = pd.to_datetime(users_data[‘reg_date’], format=‘%Y-%m-%d’)
-
users_data[‘churn_date’].fillna(‘2019-01-01’, inplace=True)
-
#если дата ухода клиента отстутствует, делаем вывод, что хотя бы в янв 2019 он остался
-
users_data[‘churn_date’] = pd.to_datetime(users_data[‘churn_date’], format=‘%Y-%m-%d’)
-
total_data = telecom_data_pvt.merge(users_data, on=‘user_id’, how=‘right’).pivot_table(
-
index=[‘user_id’, ‘first_name’, ‘last_name’, ‘age’, ‘city’, ‘tariff’, ‘reg_date’, ‘churn_date’, ‘month’])
-
total_data = total_data.reset_index()
-
#округлим кол-во гигабайт, чтобы далее при подсчете экстра стоимости за пределами тарифа не накапало
-
#лишних «копеек» за мегабайты
-
total_data[‘gb_used’] = total_data[‘gb_used’].apply(np.ceil)
-
def out_lim(row):
-
if row[‘tariff’] == ‘smart’:
-
if row[‘messages_amount’] > 50:
-
messages_extra = (row[‘messages_amount’] — 50)*3
-
else:
-
messages_extra = 0
-
if row[‘calls_amount’] > 500:
-
calls_extra = (row[‘calls_amount’] — 500)*3
-
else:
-
calls_extra = 0
-
if row[‘gb_used’] > 15:
-
gb_extra = (row[‘gb_used’] — 15)*200
-
else:
-
gb_extra = 0
-
total_cost = messages_extra + calls_extra + gb_extra + 550
-
if row[‘tariff’] == ‘ultra’:
-
if row[‘messages_amount’] > 1000:
-
messages_extra = (row[‘messages_amount’] — 1000)*1
-
else:
-
messages_extra = 0
-
if row[‘calls_amount’] > 3900:
-
calls_extra = (row[‘calls_amount’] — 3000)*1
-
else:
-
calls_extra = 0
-
if row[‘gb_used’] > 30:
-
gb_extra = (row[‘gb_used’] — 30)*150
-
else:
-
gb_extra = 0
-
total_cost = messages_extra + calls_extra + gb_extra + 1950
-
return total_cost
-
total_data[‘total_cost’] = total_data.apply(out_lim, axis=1)
-
total_data.pivot_table(index=[‘user_id’, ‘first_name’, ‘last_name’, ‘age’, ‘city’, ‘tariff’, ‘reg_date’, ‘churn_date’, ‘month’])
-
## Анализ данных
-
Посчитаем среднее, дисперсию и ст. отклонение для тарифа smart.
-
smart_data = total_data.query(‘tariff == «smart»‘)
-
smart_data[[‘total_cost’]].describe()
-
#среднее равно 1171 руб
-
# ст.откл. = 745 руб
-
Посчитаем дисперсию и мат.ожидание для тарифв Smart:
-
variance_smart = np.var(smart_data[[‘total_cost’]])
-
variance_smart
-
expectation_smart = variance_smart**0.5
-
expectation_smart
-
То же сделаем для тарифв Ultra:
-
ultra_data = total_data.query(‘tariff == «ultra»‘)
-
ultra_data[[‘total_cost’]].describe()
-
#среднее равно 2071 руб
-
# ст.откл. = 382 руб
-
variance_ultra = np.var(ultra_data[[‘total_cost’]])
-
variance_ultra
-
expectation_ultra = variance_ultra**0.5
-
expectation_ultra
-
Построим диаграммы размаха для каждого тарифа:
-
smart_data[[‘total_cost’]].boxplot(vert=False)
-
parameters = smart_data[[‘total_cost’]].describe().T
-
q1, q2 = parameters[‘25%’][0], parameters[‘75%’][0]
-
iqr = q2 — q1
-
max_value = q2 + 3*iqr
-
max_value #макс значениие. все что больше считаем выбросами
-
ultra_data[[‘total_cost’]].boxplot(vert=False)
-
Видим, что в тарифе Ultra практически никто не выходит за рамки тарифа, тогда как в тарифе Smart при стоимости 550р в месяц разброс относительно большой, а мат.ожидание равно 745 руб.
-
Нормальные значения для тарифа smart от 550руб до 1550руб, прочие можем считать выбросами. Максимально допустимое значение у тарифа smart — 4550 руб.
-
Для тарифа Ultra нормальное значение — цена тарифа, 1950р.
Python
Pandas
предобработка данных
Python
Pandas
Python
Pandas
Matplotlib
предобработка данных
исследовательский анализ данных
визуализация данных
Python
Pandas
Matplotlib
NumPy
SciPy
проверка статистических гипотез
описательная статистика
Python
Pandas
NumPy
Matplotlib
предобработка данных
исследовательский анализ данных
описательная статистика
проверка статистических гипотез
SQL
PostgreSQL
Python
Pandas
Matplotlib
когортный анализ
юнит-экономика
продуктовые метрики
Seaborn
SQL
PostgreSQL
Python
Pandas
Matplotlib
SciPy
A/B-тестирование
проверка статистических гипотез
Python
Pandas
Matplotlib
SciPy
A/B-тестирование
проверка статистических гипотез
Seaborn
событийная аналитика
продуктовые метрики
Plotly
визуализация данных
Python
Pandas
Matplotlib
Seaborn
Plotly
визуализация данных
Python
PostgreSQL
Tableau
продуктовые метрики
построение дашбордов
Python
Pandas
Scikit-learn
Matplotlib
Seaborn
машинное обучение
классификация
кластеризация
SQL
PostgreSQL
Python
Pandas
Scikit-learn
Matplotlib
Seaborn
машинное обучение
классификация
кластеризация
Tableau
продуктовые метрики
построение дашбордов
A/B-тестирование
проверка статистических гипотез
stuksus / mobile-tariffs-analysis
Goto Github
PK
View Code? Open in Web Editor
NEW
2.0
2.0
293 KB
Определение перспективного тарифа для телеком компании
Jupyter Notebook 100.00%
mobile-tariffs-analysis’s Introduction
Определение перспективного тарифа для телеком компании
Содержание
- 1 Определение перспективного тарифа для телеком компании
- 1.1 Описание проекта
- 1.2 Описание тарифов
- 1.3 Описание данных
- 1.4 Вывод
Описание проекта
Клиентам предлагают два тарифных плана: «Смарт» и «Ультра».
Мне предстоит сделать предварительный анализ тарифов на небольшой выборке клиентов. В моем распоряжении данные 500 пользователей «Мегалайна»: кто они, откуда, каким тарифом пользуются и т.д. за 2018 год. Нужно проанализировать поведение клиентов и сделать вывод — какой тариф лучше, чтобы скорректировать рекламный бюджет, коммерческий департамент компании «Мегалайн» хочет понять, какой тариф приносит больше денег.
Описание тарифов
-
Тариф «Смарт»
- Ежемесячная плата: 550 рублей
- Включено 500 минут разговора, 50 сообщений и 15 Гб интернет-трафика
- Стоимость услуг сверх тарифного пакета:
- минута разговора: 3 рубля
- сообщение: 3 рубля
- 1 Гб интернет-трафика: 200 рублей
-
Тариф «Ультра»
- Ежемесячная плата: 1950 рублей
- Включено 3000 минут разговора, 1000 сообщений и 30 Гб интернет-трафика
- Стоимость услуг сверх тарифного пакета:
- минута разговора: 1 рубль
- сообщение: 1 рубль
- 1 Гб интернет-трафика: 150 рублей
Описание данных
-
Таблица users (информация о пользователях):
- user_id — уникальный идентификатор пользователя
- first_name — имя пользователя
- last_name — фамилия пользователя
- age — возраст пользователя (годы)
- reg_date — дата подключения тарифа (день, месяц, год)
- churn_date — дата прекращения пользования тарифом (если значение пропущено, то тариф ещё действовал на момент выгрузки данных)
- city — город проживания пользователя
- tariff — название тарифного плана
-
Таблица calls (информация о звонках):
- id — уникальный номер звонка
- call_date — дата звонка
- duration — длительность звонка в минутах
- user_id — идентификатор пользователя, сделавшего звонок
-
Таблица messages (информация о сообщениях):
- id — уникальный номер сообщения
- message_date — дата сообщения
- user_id — идентификатор пользователя, отправившего сообщение
-
Таблица internet (информация об интернет-сессиях):
- id — уникальный номер сессии
- mb_used — объём потраченного за сессию интернет-трафика (в мегабайтах)
- session_date — дата интернет-сессии
- user_id — идентификатор пользователя
-
Таблица tariffs (информация о тарифах):
- tariff_name — название тарифа
- rub_monthly_fee — ежемесячная абонентская плата в рублях
- minutes_included — количество минут разговора в месяц, включённых в абонентскую плату
- messages_included — количество сообщений в месяц, включённых в абонентскую плату
- mb_per_month_included — объём интернет-трафика, включённого в абонентскую плату (в мегабайтах)
- rub_per_minute — стоимость минуты разговора сверх тарифного пакета (например, если в тарифе 100 минут разговора в месяц, то со 101 минуты будет взиматься плата)
- rub_per_message — стоимость отправки сообщения сверх тарифного пакета
- rub_per_gb — стоимость дополнительного гигабайта интернет-трафика сверх тарифного пакета (1 гигабайт = 1024 мегабайта)
Вывод
Рекламный бюджет выгоднее всего перераспределить в пользу тарифа ultra, несмотря на то, что его абоненты не покупают дополнительные минуты и смс, в отличие от абонентов тарифа smart. Так же можно заметить, что медианное и среднее значение дохода у абонентов тарифа ultra выше.
В процессе работы, было выявлено, что в целом данные приходят без артефактов и достаточно чистые, за исключением столбца churn_date таблицы users. Я бы предложил при их сборе дополнительно помечать абонентов каким то максимально разумным значением или же условным нулем, чтобы упростить анализ, тем что нет необходимости дополнительно придумывать условные флаги, которые сможет переработать компьютер.К тому же если над подобными данными будут работать несколько сотрудников и каждый из них определит для себя индивидуальный флаг, то в дальнейшем при объединении работ могут появиться баги, которые сложно будет отловить.
Так же исследовав предоставленные данные мы смогли проверить гипотезы. Эти данные помогли нам опровергнуть гипотезу о том, что средняя выручка пользователей разных тарифов равна, а так же с большой вероятностью сказать, что средняя выручка пользователей из Москвы равна выручке пользователей из других регионов.
Кроме того, в процессе анализа мы узнали, что в среднем разница медианных и среднеарифметических значений дохода с разных тарифов отличается ~1000 в пользу тарифа ultra
mobile-tariffs-analysis’s People
Contributors
Watchers
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.