├── 10_visits_by_browser
├── README.md
└── visits_by_browser.ipynb
├── 11_telegram_bot_airflow_reporting
├── README.md
├── mini_project.py
├── mini_project_dag.py
└── report_2019-04-01.txt
├── 12_sql_task
└── sql_tasks.ipynb
├── 13_nyc_taxi_timeit_optimization
├── README.md
└── nyc_taxi_timeit.ipynb
├── 14_bikes_rent_chicago
├── README.md
└── bike_rent_chicago.ipynb
├── 15_booking_in_london
├── .ipynb_checkpoints
│ └── bookings_in_london-checkpoint.ipynb
├── README.md
└── bookings_in_london.ipynb
├── 16_retail_dashboard
├── README.md
├── retail_dashboard.ipynb
├── task1.png
├── task2.png
├── task3.png
├── task_4.png
├── task_5.png
├── task_6.png
├── task_7.png
└── task_8_dashboard.png
├── 17_video_games
├── README.md
└── video_games.ipynb
├── 18_ads_conversion
├── README.md
└── ads_conversion.ipynb
├── 19_yandex_music
├── README.md
└── yandex_music_project.ipynb
├── 1_taxi_in_nyc
├── README.md
└── taxi_in_nyc.ipynb
├── 20_bikes_rent_london
├── README.md
└── bikes_rent_london.ipynb
├── 21_delivery_ab
├── README.md
└── delivery_ab.ipynb
├── 22_app_interface_ab
├── README.md
└── app_interface_ab.ipynb
├── 23_cars_sales
├── README.md
└── cars_sales.ipynb
├── 24_bootstrap_ab
├── README.md
└── bootstrap_ab.ipynb
├── 25_mobile_app_aa
├── README.md
└── mobile_app_aa.ipynb
├── 26_taxi_churn
├── README.md
├── churn_abs.png
├── churn_city.png
├── churn_pct.png
├── churn_platform.png
└── taxi_churn.ipynb
├── 27_ab_simulation
├── README.md
└── ab_simulation.ipynb
├── 28_sales_monthly
└── README.md
├── 29_profit_monthly
└── README.md
├── 2_hotel_bookings
├── README.md
└── hotel_bookings.ipynb
├── 30_vacancies_overview
└── README.md
├── 31_sales_overview
└── README.md
├── 32_airbnb_listings
├── README.md
└── dashboard_canvas.pdf
├── 33_metrics_calc
├── README.md
└── metrics_calc.ipynb
├── 34_retention_analysis
├── README.md
└── retention_prep_data_for_tableau.ipynb
├── 35_rfm_analysis
├── README.md
└── rfm_analysis.ipynb
├── 36_probabilities
├── .ipynb_checkpoints
│ └── probabilities-checkpoint.ipynb
├── README.md
└── probabilities.ipynb
├── 37_final_project
├── README.md
├── final_project.ipynb
├── my_project_slides.pdf
└── retention_200901_200923.jpg
├── 3_user_logs
├── README.md
└── user_logs.ipynb
├── 4_taxi_peru
├── README.md
└── taxi_peru.ipynb
├── 5_raw_data_handling
├── README.md
├── data_tree.png
└── raw_data_handling.ipynb
├── 6_retail_in_germany
├── README.md
└── retail_in_germany.ipynb
├── 7_error_in_transaction_data
├── README.md
└── error_in_transaction_data.ipynb
├── 8_avocado_price
├── .ipynb_checkpoints
│ └── avocado_price-checkpoint.ipynb
├── README.md
├── avocado_EWA.jpg
├── avocado_SMA.jpg
├── avocado_price.ipynb
└── plotly_result.png
├── 9_ads_campaign
├── README.md
├── ads_campaign.ipynb
└── plotly_result.png
└── README.md
/10_visits_by_browser/README.md:
--------------------------------------------------------------------------------
1 | This is the tenth dataset analysed by me while passing [data analysis course](https://karpov.courses/) I've enrolled in January 2021.
2 |
3 |
4 | Visits by Browser -- analising web-site visits. Defining proportion of real users and visits by bots. Findig the most popular browser for users and for bots. Barplotting results, downloading data using **Google Docs API** and merging it to our dataframe. Read_csv, groupby, agg, query, sort_values, pivot, fillna, assign and merge methods were used for Exploratory Data Analysis.
5 |
6 |
7 |
8 | Hope this repo will help you to assess my coding, data analytics and SQL skills or will be just fun for you to look through.
9 |
10 |
11 |
12 | --------------------------------------------
13 | Fill free to contact me via nktn.lx@gmal.com
14 | Follow me on twitter: @nktn_lx
15 | And here on github: github.com/nktnlx
--------------------------------------------------------------------------------
/11_telegram_bot_airflow_reporting/README.md:
--------------------------------------------------------------------------------
1 | This is the eleventh dataset analyzed by me while passing [data analysis course](https://karpov.courses/) I've enrolled in January 2021.
2 |
3 |
4 | Telegram Bot Airflow Reporting -- reading an advertising campaign data from Google Docs spreadsheet, creating pandas dataframe to calculate clicks, views, **CTR** and money spent on the campaign. Calculating day by day change of the metrics, writing report with results to a txt file and sending this file via telegram bot to your mobile phone. The script is executed by Airflow every Monday at 12:00 p.m.
5 |
6 | Do not forget to create your own json file with Telegram token and chat_id to run the script properly.
7 |
8 | Files description:
9 | mini_project.py -- is for running the script in terminal
10 | mini_project_dag.py -- DAG with the script to be executed with Airflow by a preset schedule
11 | report_2019-04-01.txt -- the result of running the script
12 |
13 |
14 |
15 | Hope this repo will help you to assess my coding, data analytics and SQL skills or will be just fun for you to look through.
16 |
17 |
18 |
19 | --------------------------------------------
20 | Fill free to contact me via nktn.lx@gmal.com
21 | Follow me on twitter: @nktn_lx
22 | And here on github: github.com/nktnlx
--------------------------------------------------------------------------------
/11_telegram_bot_airflow_reporting/mini_project.py:
--------------------------------------------------------------------------------
1 | import pandas as pd
2 | import requests
3 | import json
4 | from urllib.parse import urlencode
5 | import os
6 |
7 |
8 |
9 | # url to download data
10 | url = 'https://docs.google.com/spreadsheets/d/e/2PACX-1vR-ti6Su94955DZ4Tky8EbwifpgZf_dTjpBdiVH0Ukhsq94jZdqoHuUytZsFZKfwpXEUCKRFteJRc9P/pub?gid=889004448&single=true&output=csv'
11 | df = pd.read_csv(url, parse_dates=['date', 'time'])
12 |
13 |
14 | # calculating dataframe with all necessary metrics for reporting
15 | def calc_metrics(df):
16 | # count views
17 | views = ( df.query('event == "view"')
18 | .groupby(['date'], as_index=False)
19 | .agg({'event': 'count'})
20 | .rename(columns={'event': 'views_count'}) )
21 |
22 | # count clicks
23 | clicks = ( df.query('event == "click"')
24 | .groupby(['date'], as_index=False)
25 | .agg({'event': 'count'})
26 | .rename(columns={'event': 'clicks_count'}) )
27 | # count ctr
28 | ctr = ( clicks.merge(views, on='date')
29 | .assign(ctr_percentage = round(100 * clicks.clicks_count / views.views_count, 2)) )
30 |
31 | # count money_spent
32 | result = ( df.drop_duplicates(subset=['date'], keep='first')
33 | .loc[: , ['date','ad_cost']]
34 | .merge(ctr, on='date') )
35 | result = result.assign(money_spent = (result.ad_cost / 1000) * result.views_count)
36 |
37 | # calc percentage difference between two dates
38 | result['clicks_dif'] = round(result.clicks_count.pct_change() * 100, 2)
39 | result['views_dif'] = round(result.views_count.pct_change() * 100, 2)
40 | result['ctr_dif'] = round(result.ctr_percentage.pct_change() * 100, 2)
41 | result['money_spent_dif'] = round(result.money_spent.pct_change() * 100, 2)
42 |
43 | return result
44 |
45 |
46 | # creating a report and writing it to a txt-file
47 | def report(result):
48 | # creating variables for reporting
49 | date = result.date.astype('str')[0]
50 | ad_id = df.ad_id.iloc[0]
51 | money = round(result.money_spent[1], 2)
52 | money_dif = round(result.money_spent_dif[1], 2)
53 | views = round(result.views_count[1], 2)
54 | views_dif = round(result.views_dif[1], 2)
55 | clicks = round(result.clicks_count[1], 2)
56 | clicks_dif = round(result.clicks_dif[1], 2)
57 | ctr = round(result.ctr_percentage[1], 2)
58 | ctr_dif = round(result.ctr_dif[1], 2)
59 |
60 | # writing report to a file
61 | with open('report_{}.txt'.format(date), 'w') as rep:
62 | rep.write(
63 | f'''Published ad_id {ad_id} report for {date}:
64 | Expenditures: {money} RUB ({money_dif}%)
65 | Views: {views} ({views_dif}%)
66 | Clicks: {clicks} ({clicks_dif}%)
67 | CTR: {ctr} ({ctr_dif}%)
68 | ''')
69 | return 'report_{}.txt'.format(date)
70 |
71 |
72 | # sending file with the report via telegram bot
73 | def send_via_tlgrm(file_name):
74 | # reading token and chat_id from a file
75 | with open('ini.json') as src: # here should be path to a file with your token and chat_id info!!!
76 | data = json.load(src)
77 |
78 | # @david8test_bot
79 | token = data['token']
80 | chat_id = data['chat_id'] # your chat id
81 |
82 | # sending message
83 | message = 'Please find attached a report:' # text which you want to send
84 | params = {'chat_id': chat_id, 'text': message}
85 | base_url = f'https://api.telegram.org/bot{token}/'
86 | url = base_url + 'sendMessage?' + urlencode(params)
87 | resp = requests.get(url)
88 |
89 | # getting current working directory and definging path to file
90 | cwd = os.getcwd()
91 | filepath = cwd + '/' + file_name
92 |
93 | # sending a file with report
94 | url = base_url + 'sendDocument?' + urlencode(params)
95 | files = {'document': open(filepath, 'rb')}
96 | resp = requests.get(url, files=files)
97 | ## Now you'll receive a text message and the file with a report from your bot
98 |
99 |
100 | # function to execute the script
101 | def main():
102 | result = calc_metrics(df)
103 | filename = report(result)
104 | send_via_tlgrm(filename)
105 |
106 |
107 | # boilerplate to run the script
108 | if __name__ == '__main__':
109 | main()
--------------------------------------------------------------------------------
/11_telegram_bot_airflow_reporting/mini_project_dag.py:
--------------------------------------------------------------------------------
1 | from airflow import DAG
2 | from airflow.operators.python_operator import PythonOperator
3 | from datetime import datetime
4 | import pandas as pd
5 |
6 |
7 | # default arguments for airflow
8 | default_args = {
9 | 'owner': 'a.nikitin-8',
10 | 'depends_on_past': False,
11 | 'start_date': datetime(2021, 2, 11),
12 | 'retries': 0
13 | }
14 |
15 | # creating DAG
16 | dag = DAG('ad_report',
17 | default_args=default_args,
18 | catchup=False,
19 | schedule_interval='0 12 * * 1') # is executed every Monday at 12:00 p.m.
20 |
21 |
22 | # url to download data
23 | url = 'https://docs.google.com/spreadsheets/d/e/2PACX-1vR-ti6Su94955DZ4Tky8EbwifpgZf_dTjpBdiVH0Ukhsq94jZdqoHuUytZsFZKfwpXEUCKRFteJRc9P/pub?gid=889004448&single=true&output=csv'
24 | df = pd.read_csv(url, parse_dates=['date', 'time'])
25 |
26 |
27 | # calculating dataframe with all necessary metrics for reporting
28 | def calc_metrics(df):
29 | # count views
30 | views = ( df.query('event == "view"')
31 | .groupby(['date'], as_index=False)
32 | .agg({'event': 'count'})
33 | .rename(columns={'event': 'views_count'}) )
34 |
35 | # count clicks
36 | clicks = ( df.query('event == "click"')
37 | .groupby(['date'], as_index=False)
38 | .agg({'event': 'count'})
39 | .rename(columns={'event': 'clicks_count'}) )
40 | # count ctr
41 | ctr = ( clicks.merge(views, on='date')
42 | .assign(ctr_percentage = round(100 * clicks.clicks_count / views.views_count, 2)) )
43 |
44 | # count money_spent
45 | result = ( df.drop_duplicates(subset=['date'], keep='first')
46 | .loc[: , ['date','ad_cost']]
47 | .merge(ctr, on='date') )
48 | result = result.assign(money_spent = (result.ad_cost / 1000) * result.views_count)
49 |
50 | # calc percentage difference between two dates
51 | result['clicks_dif'] = round(result.clicks_count.pct_change() * 100, 2)
52 | result['views_dif'] = round(result.views_count.pct_change() * 100, 2)
53 | result['ctr_dif'] = round(result.ctr_percentage.pct_change() * 100, 2)
54 | result['money_spent_dif'] = round(result.money_spent.pct_change() * 100, 2)
55 |
56 | return result
57 |
58 |
59 | # creating a report and writing it to a txt-file
60 | def report(result):
61 | # creating variables for reporting
62 | date = result.date.astype('str')[0]
63 | ad_id = df.ad_id.iloc[0]
64 | money = round(result.money_spent[1], 2)
65 | money_dif = round(result.money_spent_dif[1], 2)
66 | views = round(result.views_count[1], 2)
67 | views_dif = round(result.views_dif[1], 2)
68 | clicks = round(result.clicks_count[1], 2)
69 | clicks_dif = round(result.clicks_dif[1], 2)
70 | ctr = round(result.ctr_percentage[1], 2)
71 | ctr_dif = round(result.ctr_dif[1], 2)
72 |
73 | # writing report to a file
74 | with open('report_{}.txt'.format(date), 'w') as rep:
75 | rep.write(
76 | f'''Published ad_id {ad_id} report for {date}:
77 | Expenditures: {money} RUB ({money_dif}%)
78 | Views: {views} ({views_dif}%)
79 | Clicks: {clicks} ({clicks_dif}%)
80 | CTR: {ctr} ({ctr_dif}%)
81 | ''')
82 | return 'report_{}.txt'.format(date)
83 |
84 |
85 | # sending file with the report via telegram bot
86 | def send_via_tlgrm(file_name):
87 | import requests
88 | import json
89 | from urllib.parse import urlencode
90 | import os
91 | # reading token and chat_id from a file
92 | with open('ini.json') as src: # here should be path to a file with your token and chat_id info!!!
93 | data = json.load(src)
94 |
95 | # @david8test_bot
96 | token = data['token']
97 | chat_id = data['chat_id'] # your chat id
98 |
99 | # sending message
100 | message = 'Please find attached a report:' # text which you want to send
101 | params = {'chat_id': chat_id, 'text': message}
102 | base_url = f'https://api.telegram.org/bot{token}/'
103 | url = base_url + 'sendMessage?' + urlencode(params)
104 | resp = requests.get(url)
105 |
106 | # getting current working directory and definging path to file
107 | cwd = os.getcwd()
108 | filepath = cwd + '/' + file_name
109 |
110 | # sending a file with report
111 | url = base_url + 'sendDocument?' + urlencode(params)
112 | files = {'document': open(filepath, 'rb')}
113 | resp = requests.get(url, files=files)
114 | ## Now you'll receive a text message and the file with a report from your bot
115 |
116 |
117 | # function to execute the script
118 | def main():
119 | result = calc_metrics(df)
120 | filename = report(result)
121 | send_via_tlgrm(filename)
122 |
123 |
124 | # task
125 | t1 = PythonOperator(
126 | task_id='write_ad_report',
127 | python_callable=main,
128 | dag=dag)
--------------------------------------------------------------------------------
/11_telegram_bot_airflow_reporting/report_2019-04-01.txt:
--------------------------------------------------------------------------------
1 | Published ad_id 121288 report for 2019-04-01:
2 | Expenditures: 17.43 RUB (-81.06%)
3 | Views: 93 (-81.06%)
4 | Clicks: 6 (-64.71%)
5 | CTR: 6.45 (86.42%)
6 |
--------------------------------------------------------------------------------
/13_nyc_taxi_timeit_optimization/README.md:
--------------------------------------------------------------------------------
1 | This is the thirteenth dataset analyzed by me while passing [data analysis course](https://karpov.courses/) I've enrolled in January 2021.
2 |
3 |
4 | NYC taxi & timeit optimization -- calculating distance of a ride using pick-up and drop-off coordinates. Compared a couple of ways to apply distance calculation to the dataframe. The optimization helped to decrease calculation run-time about 3276 times! Checked calculation results, found outliers using boxplot graphs and descriptive statistics. Fixed dataframe by removing outliers and found the cost of the longest ride.
5 |
6 |
7 |
8 |
9 | Hope this repo will help you to assess my coding, data analytics and SQL skills or will be just fun for you to look through.
10 |
11 |
12 |
13 | --------------------------------------------
14 | Fill free to contact me via nktn.lx@gmal.com
15 | Follow me on twitter: @nktn_lx
16 | And here on github: github.com/nktnlx
--------------------------------------------------------------------------------
/14_bikes_rent_chicago/README.md:
--------------------------------------------------------------------------------
1 | This is the fourteenth dataset analyzed by me while passing [data analysis course](https://karpov.courses/) I've enrolled in January 2021.
2 |
3 |
4 | Bikes rent in Chicago -- dates to dateformat conversion, resampling data to aggregate by days, automatically merging data from distinct files into one dataframe using os.walk(), differentiating bikes rents by user type, finding the most popular destination points overall and based on the week of the day.
5 |
6 |
7 |
8 |
9 |
10 | Hope this repo will help you to assess my coding, data analytics and SQL skills or will be just fun for you to look through.
11 |
12 |
13 |
14 | --------------------------------------------
15 | Fill free to contact me via nktn.lx@gmal.com
16 | Follow me on twitter: @nktn_lx
17 | And here on github: github.com/nktnlx
--------------------------------------------------------------------------------
/15_booking_in_london/README.md:
--------------------------------------------------------------------------------
1 | This is the fifteenth dataset analyzed by me while passing [data analysis course](https://karpov.courses/) I've enrolled in January 2021.
2 |
3 |
4 | Bookings in London -- used Pandahouse and SQL queries to import data from Clickhouse into pandas dataframe. Processed imported data and performed Exploratory Data Analysis. Built scatterplot, distplot, lineplot and heatmap using Seaborn and Matplotlib.
5 |
6 |
7 |
8 |
9 |
10 | Hope this repo will help you to assess my coding, data analytics and SQL skills or will be just fun for you to look through.
11 |
12 |
13 |
14 | --------------------------------------------
15 | Fill free to contact me via nktn.lx@gmal.com
16 | Follow me on twitter: @nktn_lx
17 | And here on github: github.com/nktnlx
--------------------------------------------------------------------------------
/16_retail_dashboard/README.md:
--------------------------------------------------------------------------------
1 | This is the sixteenth dataset analyzed by me while passing [data analysis course](https://karpov.courses/) I've enrolled in January 2021.
2 |
3 |
4 | Retail dashboard -- built a series of visualizations and a dashboard using SQL queries and Redash. Calculated and checked the dynamics of **MAU** and **AOV**. Found an anomaly in data, defined the market generating the majority of revenue, analyzed the most popular goods sold in the store. Wrote a dashboard summary with recommendation to push up sales.
5 |
6 |
7 |
8 |
9 | Hope this repo will help you to assess my coding, data analytics and SQL skills or will be just fun for you to look through.
10 |
11 |
12 |
13 | --------------------------------------------
14 | Fill free to contact me via nktn.lx@gmal.com
15 | Follow me on twitter: @nktn_lx
16 | And here on github: github.com/nktnlx
--------------------------------------------------------------------------------
/16_retail_dashboard/retail_dashboard.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "## Retail Dashboard"
8 | ]
9 | },
10 | {
11 | "cell_type": "code",
12 | "execution_count": null,
13 | "metadata": {},
14 | "outputs": [],
15 | "source": [
16 | "# Visualization and dashboard were created using Redash (https://redash.io/)"
17 | ]
18 | },
19 | {
20 | "cell_type": "markdown",
21 | "metadata": {},
22 | "source": [
23 | "**Create a table for our retail data**"
24 | ]
25 | },
26 | {
27 | "cell_type": "code",
28 | "execution_count": null,
29 | "metadata": {},
30 | "outputs": [],
31 | "source": [
32 | "CREATE TABLE test.retail (\n",
33 | " InvoiceNo stringMergeTree,\n",
34 | " StockCode stringMergeTree,\n",
35 | " Description stringMergeTree,\n",
36 | " Quantity Int32,\n",
37 | " InvoiceDate DateTime('Europe/London'),\n",
38 | " UnitPrice Decimal64(3),\n",
39 | " CustomerID uint32,\n",
40 | " Country stringMergeTree)\n",
41 | "ENGINE = MergeTree\n",
42 | "ORDER BY InvoiceDate, CustomerID"
43 | ]
44 | },
45 | {
46 | "cell_type": "markdown",
47 | "metadata": {},
48 | "source": [
49 | "**Check the number of unique customers by country**"
50 | ]
51 | },
52 | {
53 | "cell_type": "code",
54 | "execution_count": null,
55 | "metadata": {},
56 | "outputs": [],
57 | "source": [
58 | "SELECT COUNT(DISTINCT CustomerID) AS uniq_customers,\n",
59 | " Country\n",
60 | "FROM default.retail\n",
61 | "GROUP BY Country"
62 | ]
63 | },
64 | {
65 | "cell_type": "markdown",
66 | "metadata": {},
67 | "source": [
68 | ""
69 | ]
70 | },
71 | {
72 | "cell_type": "markdown",
73 | "metadata": {},
74 | "source": [
75 | "**Check the change of MAU (monthly active users) in UK, Australia and Netherlands**"
76 | ]
77 | },
78 | {
79 | "cell_type": "code",
80 | "execution_count": null,
81 | "metadata": {},
82 | "outputs": [],
83 | "source": [
84 | "SELECT COUNT(DISTINCT CustomerID) AS active_users,\n",
85 | " toStartOfMonth(InvoiceDate) AS MONTH,\n",
86 | " Country AS country\n",
87 | "FROM default.retail\n",
88 | "WHERE country IN ('United Kingdom',\n",
89 | " 'Australia',\n",
90 | " 'Netherlands')\n",
91 | "GROUP BY MONTH,\n",
92 | " country\n",
93 | "ORDER BY MONTH"
94 | ]
95 | },
96 | {
97 | "cell_type": "markdown",
98 | "metadata": {},
99 | "source": [
100 | ""
101 | ]
102 | },
103 | {
104 | "cell_type": "markdown",
105 | "metadata": {},
106 | "source": [
107 | "**Check the change of MAU (monthly active users) for all countries except UK**"
108 | ]
109 | },
110 | {
111 | "cell_type": "code",
112 | "execution_count": null,
113 | "metadata": {},
114 | "outputs": [],
115 | "source": [
116 | "SELECT COUNT(DISTINCT CustomerID) AS active_users,\n",
117 | " toStartOfMonth(InvoiceDate) AS MONTH,\n",
118 | " Country AS country\n",
119 | "FROM default.retail\n",
120 | "WHERE country != 'United Kingdom'\n",
121 | "GROUP BY MONTH,\n",
122 | " country\n",
123 | "ORDER BY MONTH"
124 | ]
125 | },
126 | {
127 | "cell_type": "markdown",
128 | "metadata": {},
129 | "source": [
130 | ""
131 | ]
132 | },
133 | {
134 | "cell_type": "markdown",
135 | "metadata": {},
136 | "source": [
137 | "**Calculate AOV (average order value) for each country**"
138 | ]
139 | },
140 | {
141 | "cell_type": "code",
142 | "execution_count": null,
143 | "metadata": {},
144 | "outputs": [],
145 | "source": [
146 | "SELECT AVG(order_value) AS AOV,\n",
147 | " Country\n",
148 | "FROM\n",
149 | " (SELECT InvoiceNo,\n",
150 | " SUM(TotalPrice) AS order_value,\n",
151 | " Country\n",
152 | " FROM\n",
153 | " (SELECT InvoiceNo,\n",
154 | " Quantity * UnitPrice AS TotalPrice,\n",
155 | " Country\n",
156 | " FROM default.retail)\n",
157 | " GROUP BY InvoiceNo,\n",
158 | " Country\n",
159 | " ORDER BY order_value DESC)\n",
160 | "GROUP BY Country\n",
161 | "ORDER BY AOV DESC"
162 | ]
163 | },
164 | {
165 | "cell_type": "markdown",
166 | "metadata": {},
167 | "source": [
168 | ""
169 | ]
170 | },
171 | {
172 | "cell_type": "markdown",
173 | "metadata": {},
174 | "source": [
175 | "**Check the dynamics of AOV metrics for United Kingdom, Germany, France, Spain, Netherlands, Belgium, Switzerland, Portugal, Australia, USA**"
176 | ]
177 | },
178 | {
179 | "cell_type": "code",
180 | "execution_count": null,
181 | "metadata": {},
182 | "outputs": [],
183 | "source": [
184 | "SELECT AVG(order_value) AS AOV,\n",
185 | " Country,\n",
186 | " MONTH\n",
187 | "FROM\n",
188 | " (SELECT SUM(TotalPrice) AS order_value,\n",
189 | " MONTH,\n",
190 | " Country\n",
191 | " FROM\n",
192 | " (SELECT InvoiceNo,\n",
193 | " Quantity * UnitPrice AS TotalPrice,\n",
194 | " Country,\n",
195 | " toStartOfMonth(InvoiceDate) AS MONTH\n",
196 | " FROM default.retail\n",
197 | " WHERE Country IN ('United Kingdom',\n",
198 | " 'Germany',\n",
199 | " 'France',\n",
200 | " 'Spain',\n",
201 | " 'Netherlands',\n",
202 | " 'Belgium',\n",
203 | " 'Switzerland',\n",
204 | " 'Portugal',\n",
205 | " 'Australia',\n",
206 | " 'USA') )\n",
207 | " GROUP BY InvoiceNo,\n",
208 | " Country,\n",
209 | " MONTH\n",
210 | " ORDER BY MONTH ASC, order_value DESC)\n",
211 | "GROUP BY MONTH,\n",
212 | " Country\n",
213 | "ORDER BY MONTH ASC, AOV DESC"
214 | ]
215 | },
216 | {
217 | "cell_type": "markdown",
218 | "metadata": {},
219 | "source": [
220 | ""
221 | ]
222 | },
223 | {
224 | "cell_type": "markdown",
225 | "metadata": {},
226 | "source": [
227 | "**Calculate an average number of items per order by country**"
228 | ]
229 | },
230 | {
231 | "cell_type": "code",
232 | "execution_count": null,
233 | "metadata": {},
234 | "outputs": [],
235 | "source": [
236 | "SELECT AVG(quantity_per_invoice) AS average_items,\n",
237 | " Country\n",
238 | "FROM\n",
239 | " (SELECT InvoiceNo,\n",
240 | " SUM(Quantity) AS quantity_per_invoice,\n",
241 | " Country\n",
242 | " FROM default.retail\n",
243 | " GROUP BY InvoiceNo,\n",
244 | " Country)\n",
245 | "GROUP BY Country\n",
246 | "ORDER BY average_items DESC"
247 | ]
248 | },
249 | {
250 | "cell_type": "markdown",
251 | "metadata": {},
252 | "source": [
253 | ""
254 | ]
255 | },
256 | {
257 | "cell_type": "markdown",
258 | "metadata": {},
259 | "source": [
260 | "**Investigate customers from the Netherlands. Find a customer who has bought the biggest number of items**"
261 | ]
262 | },
263 | {
264 | "cell_type": "code",
265 | "execution_count": null,
266 | "metadata": {},
267 | "outputs": [],
268 | "source": [
269 | "SELECT\n",
270 | " SUM(Quantity) AS overall_quantity,\n",
271 | " CustomerID\n",
272 | "FROM default.retail\n",
273 | "WHERE Country == 'Netherlands'\n",
274 | "GROUP BY CustomerID\n",
275 | "ORDER BY overall_quantity DESC\n",
276 | "LIMIT 100"
277 | ]
278 | },
279 | {
280 | "cell_type": "markdown",
281 | "metadata": {},
282 | "source": [
283 | "Now we can see that an average number of items per invoice is so high for customers from the Netherlands because we have one customer (CustomerID 14646) who has purchased 196719 items!\n",
284 | ""
285 | ]
286 | },
287 | {
288 | "cell_type": "markdown",
289 | "metadata": {},
290 | "source": [
291 | "**Calculate revenue deistribution per country**"
292 | ]
293 | },
294 | {
295 | "cell_type": "code",
296 | "execution_count": null,
297 | "metadata": {},
298 | "outputs": [],
299 | "source": [
300 | "SELECT\n",
301 | " Country,\n",
302 | " --UnitPrice, \n",
303 | " --Quantity,\n",
304 | " SUM(UnitPrice * Quantity) AS total_revenue\n",
305 | "FROM default.retail\n",
306 | "GROUP BY Country\n",
307 | "ORDER BY total_revenue DESC"
308 | ]
309 | },
310 | {
311 | "cell_type": "markdown",
312 | "metadata": {},
313 | "source": [
314 | "**Calculate monthly revenue dynamics for UK**"
315 | ]
316 | },
317 | {
318 | "cell_type": "code",
319 | "execution_count": null,
320 | "metadata": {},
321 | "outputs": [],
322 | "source": [
323 | "SELECT\n",
324 | " toStartOfMonth(InvoiceDate) AS month,\n",
325 | " SUM(UnitPrice * Quantity) AS monthly_reveue\n",
326 | "FROM default.retail\n",
327 | "WHERE Country == 'United Kingdom'\n",
328 | " AND month < '2011-12-01'\n",
329 | "GROUP BY month\n",
330 | "ORDER BY month ASC\n",
331 | "LIMIT 100"
332 | ]
333 | },
334 | {
335 | "cell_type": "markdown",
336 | "metadata": {},
337 | "source": [
338 | "**Find the top-10 sales value items in UK in November**"
339 | ]
340 | },
341 | {
342 | "cell_type": "code",
343 | "execution_count": null,
344 | "metadata": {},
345 | "outputs": [],
346 | "source": [
347 | "SELECT\n",
348 | " Description,\n",
349 | " SUM(Quantity) AS items_sold,\n",
350 | " UnitPrice,\n",
351 | " items_sold * UnitPrice AS total_sales_revenue\n",
352 | "FROM default.retail\n",
353 | "WHERE (toStartOfMonth(InvoiceDate) == '2011-11-01')\n",
354 | " AND Country == 'United Kingdom'\n",
355 | "GROUP BY Description, UnitPrice\n",
356 | "ORDER BY total_sales_revenue DESC\n",
357 | "LIMIT 10"
358 | ]
359 | },
360 | {
361 | "cell_type": "markdown",
362 | "metadata": {},
363 | "source": [
364 | "**Create a dashboard using the last three queries**"
365 | ]
366 | },
367 | {
368 | "cell_type": "markdown",
369 | "metadata": {},
370 | "source": [
371 | ""
372 | ]
373 | },
374 | {
375 | "cell_type": "markdown",
376 | "metadata": {},
377 | "source": [
378 | "#### Dashboard summary\n",
379 | "The geography of the store's sales is shown in the upper left part of the dashboard. These are mainly Western Europe, Scandinavian countries, Great Britain, Canada, Australia and Brazil. The breakdown of revenue by country is shown in the bottom left corner. The first place by revenue is occupied by Great Britain. Moreover, the revenue indicators in Great Britain for the reporting period exceeded the revenue in the Netherlands (the second place) by 23.78 times. \n",
380 | "\n",
381 | "Since the major part of the store's revenue is generated in the UK, an analysis of sales in this country was carried out on the right side of the dashboard. The top right corner shows the breakdown of revenue by month. It can be seen that the peak of sales is in November. This is most likely due to the eve of the Christmas holidays. After analyzing the products sold in November, we can see that the top 10 items sold in terms of revenue include Christmas decorations, garlands and New Year's gifts (frames, thermo mugs, red Christmas bags). Details on cost, quantity, as well as total revenue from the top 10 products in November are shown on the dashboard. \n",
382 | "\n",
383 | "Therefore, it is recommended to consider: \n",
384 | "- avoiding a shortage in warehouses of Christmas goods in the month of November,\n",
385 | "- to diversify the assortment of the store, to conduct campaigns to attract customers in order to avoid a significant seasonal decline in revenue in the the UK (the main market) in the period from January to September. "
386 | ]
387 | }
388 | ],
389 | "metadata": {
390 | "kernelspec": {
391 | "display_name": "Python 3",
392 | "language": "python",
393 | "name": "python3"
394 | },
395 | "language_info": {
396 | "codemirror_mode": {
397 | "name": "ipython",
398 | "version": 3
399 | },
400 | "file_extension": ".py",
401 | "mimetype": "text/x-python",
402 | "name": "python",
403 | "nbconvert_exporter": "python",
404 | "pygments_lexer": "ipython3",
405 | "version": "3.7.6"
406 | }
407 | },
408 | "nbformat": 4,
409 | "nbformat_minor": 4
410 | }
411 |
--------------------------------------------------------------------------------
/16_retail_dashboard/task1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nktnlx/data_analysis_course/5aa4ef8983b6ba5dc15e370750fa5b9022407918/16_retail_dashboard/task1.png
--------------------------------------------------------------------------------
/16_retail_dashboard/task2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nktnlx/data_analysis_course/5aa4ef8983b6ba5dc15e370750fa5b9022407918/16_retail_dashboard/task2.png
--------------------------------------------------------------------------------
/16_retail_dashboard/task3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nktnlx/data_analysis_course/5aa4ef8983b6ba5dc15e370750fa5b9022407918/16_retail_dashboard/task3.png
--------------------------------------------------------------------------------
/16_retail_dashboard/task_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nktnlx/data_analysis_course/5aa4ef8983b6ba5dc15e370750fa5b9022407918/16_retail_dashboard/task_4.png
--------------------------------------------------------------------------------
/16_retail_dashboard/task_5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nktnlx/data_analysis_course/5aa4ef8983b6ba5dc15e370750fa5b9022407918/16_retail_dashboard/task_5.png
--------------------------------------------------------------------------------
/16_retail_dashboard/task_6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nktnlx/data_analysis_course/5aa4ef8983b6ba5dc15e370750fa5b9022407918/16_retail_dashboard/task_6.png
--------------------------------------------------------------------------------
/16_retail_dashboard/task_7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nktnlx/data_analysis_course/5aa4ef8983b6ba5dc15e370750fa5b9022407918/16_retail_dashboard/task_7.png
--------------------------------------------------------------------------------
/16_retail_dashboard/task_8_dashboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nktnlx/data_analysis_course/5aa4ef8983b6ba5dc15e370750fa5b9022407918/16_retail_dashboard/task_8_dashboard.png
--------------------------------------------------------------------------------
/17_video_games/README.md:
--------------------------------------------------------------------------------
1 | This is the seventeenth dataset analyzed by me while passing [data analysis course](https://karpov.courses/) I've enrolled in January 2021.
2 |
3 |
4 | Video games -- analising video games sales dynamics with Pandas. Read_csv, head, columns, dtypes, info, isna, dropna, describe, mode, shape, groupby, agg, sort_values, rename, index, to_list, value_count methods were user for Exploratory Data Analysis. Barplot, boxplot and lineplot were used for graphing results.
5 |
6 |
7 |
8 |
9 | Hope this repo will help you to assess my coding, data analytics and SQL skills or will be just fun for you to look through.
10 |
11 |
12 |
13 | --------------------------------------------
14 | Fill free to contact me via nktn.lx@gmal.com
15 | Follow me on twitter: @nktn_lx
16 | And here on github: github.com/nktnlx
--------------------------------------------------------------------------------
/18_ads_conversion/README.md:
--------------------------------------------------------------------------------
1 | This is the eighteenth dataset analyzed by me while passing [data analysis course](https://karpov.courses/) I've enrolled in January 2021.
2 |
3 |
4 |
5 | Ads conversion -- calculating **CTR, CPC, CR** metrics. Plotting them using distplot, hist, displot and histplot methods.
6 |
7 |
8 |
9 |
10 | Hope this repo will help you to assess my coding, data analytics and SQL skills or will be just fun for you to look through.
11 |
12 |
13 |
14 | --------------------------------------------
15 | Fill free to contact me via nktn.lx@gmal.com
16 | Follow me on twitter: @nktn_lx
17 | And here on github: github.com/nktnlx
--------------------------------------------------------------------------------
/19_yandex_music/README.md:
--------------------------------------------------------------------------------
1 | This dataset is from [Yandex Praktikum data-analyst course](https://praktikum.yandex.ru/data-analyst/) I was taking in Feb-March 2021.
2 |
3 |
4 |
5 | Yandex Music -- analyzing music streaming platform songs popularity, comparing music preferences and listening templates in Moscow and Saint-Petersburg. Reading and cleaning data, renaming columns, removing duplicates, dealing with missing data, slicing dataframe to query required portion of data.
6 |
7 |
8 |
9 |
10 | Hope this repo will help you to assess my coding, data analytics and SQL skills or will be just fun for you to look through.
11 |
12 |
13 |
14 | --------------------------------------------
15 | Fill free to contact me via nktn.lx@gmal.com
16 | Follow me on twitter: @nktn_lx
17 | And here on github: github.com/nktnlx
--------------------------------------------------------------------------------
/1_taxi_in_nyc/README.md:
--------------------------------------------------------------------------------
1 | This is the first dataset analysed by me while passing [data analysis course](https://karpov.courses/) I've enrolled in January 2021.
2 |
3 |
4 | Analising NYC taxi orders with Pandas. Read_csv, rename, groupby, agg, query, sort_values, idxmax, idxmin, value_counts, pivot methods were used for Exploratory Data Analysis.
5 |
6 |
7 |
8 | Hope this repo will help you to assess my coding, data analytics and SQL skills or will be just fun for you to look through.
9 |
10 |
11 |
12 | --------------------------------------------
13 | Fill free to contact me via nktn.lx@gmal.com
14 | Follow me on twitter: @nktn_lx
15 | And here on github: github.com/nktnlx
--------------------------------------------------------------------------------
/20_bikes_rent_london/README.md:
--------------------------------------------------------------------------------
1 | This is the 20th dataset analyzed by me while passing [data analysis course](https://karpov.courses/) I've enrolled in January 2021.
2 |
3 |
4 |
5 | Bikes rent in London -- loading dataset, plotting rides count data, resampling timestamps, describing the main trends, looking for anomaly values by smoothing the data with a simple moving average, calculating the difference between the real data and smoothed data, finding standard deviation and defining the 99% confidence interval. Then we compare values with the confidence interval to find data hikes and explain them.
6 |
7 |
8 |
9 |
10 | Hope this repo will help you to assess my coding, data analytics and SQL skills or will be just fun for you to look through.
11 |
12 |
13 |
14 | --------------------------------------------
15 | Fill free to contact me via nktn.lx@gmal.com
16 | Follow me on twitter: @nktn_lx
17 | And here on github: github.com/nktnlx
--------------------------------------------------------------------------------
/21_delivery_ab/README.md:
--------------------------------------------------------------------------------
1 | This is the 21st dataset analyzed by me while passing [data analysis course](https://karpov.courses/) I've enrolled in January 2021.
2 |
3 |
4 |
5 | Delivery A/B -- Finding how a new navigational algorithm has changed the delivery time of the service. Formulating null and alternative hypothesis and performing A/B test with help of t-test.
6 |
7 |
8 |
9 |
10 | Hope this repo will help you to assess my coding, data analytics and SQL skills or will be just fun for you to look through.
11 |
12 |
13 |
14 | --------------------------------------------
15 | Fill free to contact me via nktn.lx@gmal.com
16 | Follow me on twitter: @nktn_lx
17 | And here on github: github.com/nktnlx
--------------------------------------------------------------------------------
/22_app_interface_ab/README.md:
--------------------------------------------------------------------------------
1 | This is the 22nd dataset analyzed by me while passing [data analysis course](https://karpov.courses/) I've enrolled in January 2021.
2 |
3 |
4 |
5 | App interface A/B -- Testing how images aspect ratio and a new order button design influence on the amount of orders placed by customers. Performed Levene's test to check group variance equality, Shapiro-Wilk test to check groups for normality, one-way ANOVA to check statistically significant difference between tested groups, Tukey's test to find statistically significant difference between groups, linear model multivariate analysis of variance, visualized and interpreted results, gave recommendations to put (or not to put) changes into production.
6 |
7 |
8 |
9 |
10 | Hope this repo will help you to assess my coding, data analytics and SQL skills or will be just fun for you to look through.
11 |
12 |
13 |
14 | --------------------------------------------
15 | Fill free to contact me via nktn.lx@gmal.com
16 | Follow me on twitter: @nktn_lx
17 | And here on github: github.com/nktnlx
--------------------------------------------------------------------------------
/23_cars_sales/README.md:
--------------------------------------------------------------------------------
1 | This is the 23rd dataset analyzed by me while passing [data analysis course](https://karpov.courses/) I've enrolled in January 2021.
2 |
3 |
4 |
5 | Cars sales -- predicting cars sales price using linear regerssion models (statsmodels.api & statsmodels.formula.api). Finding statistically significant predictors.
6 |
7 |
8 |
9 |
10 | Hope this repo will help you to assess my coding, data analytics and SQL skills or will be just fun for you to look through.
11 |
12 |
13 |
14 | --------------------------------------------
15 | Fill free to contact me via nktn.lx@gmal.com
16 | Follow me on twitter: @nktn_lx
17 | And here on github: github.com/nktnlx
--------------------------------------------------------------------------------
/24_bootstrap_ab/README.md:
--------------------------------------------------------------------------------
1 | This is the 24th dataset analyzed by me while passing [data analysis course](https://karpov.courses/) I've enrolled in January 2021.
2 |
3 |
4 |
5 | Bootstrap A/B -- comparing results of Mann-Whitney test and Bootstrap mean/median running on data with and without outliers.
6 |
7 |
8 |
9 |
10 | Hope this repo will help you to assess my coding, data analytics and SQL skills or will be just fun for you to look through.
11 |
12 |
13 |
14 | --------------------------------------------
15 | Fill free to contact me via nktn.lx@gmal.com
16 | Follow me on twitter: @nktn_lx
17 | And here on github: github.com/nktnlx
--------------------------------------------------------------------------------
/25_mobile_app_aa/README.md:
--------------------------------------------------------------------------------
1 | This is the 25th dataset analyzed by me while passing [data analysis course](https://karpov.courses/) I've enrolled in January 2021.
2 |
3 |
4 |
5 | Mobile App A/A -- running A/A test to check data splitting system works well. Unfortunately, we were not able to pass the test (FPR was greater than significance value). Thus, we have to dig into data and find the reason of malfunction. After removing the corrupted data we were able to pass the A/A-test.
6 |
7 |
8 |
9 |
10 |
11 | Hope this repo will help you to assess my coding, data analytics and SQL skills or will be just fun for you to look through.
12 |
13 |
14 |
15 | --------------------------------------------
16 | Fill free to contact me via nktn.lx@gmal.com
17 | Follow me on twitter: @nktn_lx
18 | And here on github: github.com/nktnlx
--------------------------------------------------------------------------------
/26_taxi_churn/README.md:
--------------------------------------------------------------------------------
1 | This is the 26th dataset analyzed by me while passing [data analysis course](https://karpov.courses/) I've enrolled in January 2021.
2 |
3 |
4 |
5 | Taxi Churn -- performing Exploratory Data Analysis, defining churn, checking distributions for normality with Shapiro-Wilk test, plotting data using plotly and A/B testing four different hypothesis with Chi-squared test, Dunn's test, Mann-Whitney U non-parametric test.
6 |
7 |
8 |
9 |
10 |
11 | Hope this repo will help you to assess my coding, data analytics and SQL skills or will be just fun for you to look through.
12 |
13 |
14 |
15 | --------------------------------------------
16 | Fill free to contact me via nktn.lx@gmal.com
17 | Follow me on twitter: @nktn_lx
18 | And here on github: github.com/nktnlx
--------------------------------------------------------------------------------
/26_taxi_churn/churn_abs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nktnlx/data_analysis_course/5aa4ef8983b6ba5dc15e370750fa5b9022407918/26_taxi_churn/churn_abs.png
--------------------------------------------------------------------------------
/26_taxi_churn/churn_city.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nktnlx/data_analysis_course/5aa4ef8983b6ba5dc15e370750fa5b9022407918/26_taxi_churn/churn_city.png
--------------------------------------------------------------------------------
/26_taxi_churn/churn_pct.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nktnlx/data_analysis_course/5aa4ef8983b6ba5dc15e370750fa5b9022407918/26_taxi_churn/churn_pct.png
--------------------------------------------------------------------------------
/26_taxi_churn/churn_platform.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nktnlx/data_analysis_course/5aa4ef8983b6ba5dc15e370750fa5b9022407918/26_taxi_churn/churn_platform.png
--------------------------------------------------------------------------------
/27_ab_simulation/README.md:
--------------------------------------------------------------------------------
1 | This is the 27th dataset analyzed by me while passing [data analysis course](https://karpov.courses/) I've enrolled in January 2021.
2 |
3 |
4 |
5 | A/B simulation -- performed a range of A/B tests to simulate how sample size and the magnitude of difference between samples influence A/B tests performance. Investigated situations when we could have a false positive error. Gained valuable lessons on A/B tests performance.
6 |
7 |
8 |
9 |
10 |
11 | Hope this repo will help you to assess my coding, data analytics and SQL skills or will be just fun for you to look through.
12 |
13 |
14 |
15 | --------------------------------------------
16 | Fill free to contact me via nktn.lx@gmal.com
17 | Follow me on twitter: @nktn_lx
18 | And here on github: github.com/nktnlx
--------------------------------------------------------------------------------
/28_sales_monthly/README.md:
--------------------------------------------------------------------------------
1 | This is the 28th dataset analyzed by me while passing [data analysis course](https://karpov.courses/) I've enrolled in January 2021.
2 |
3 |
4 |
5 | [Sales Monthly Overview](https://public.tableau.com/profile/nktn.lx#!/vizhome/SalesMonthlyOverviewpractice1/Dashboard1) -- **Tableau Public dashboard** consisted of: KPIs, line chart, bar chart, table by category with bar charts.
6 |
7 |
8 |
9 |
10 |
11 | Hope this repo will help you to assess my coding, data analytics and SQL skills or will be just fun for you to look through.
12 |
13 |
14 |
15 | --------------------------------------------
16 | Fill free to contact me via nktn.lx@gmal.com
17 | Follow me on twitter: @nktn_lx
18 | And here on github: github.com/nktnlx
--------------------------------------------------------------------------------
/29_profit_monthly/README.md:
--------------------------------------------------------------------------------
1 | This is the 29th dataset analyzed by me while passing [data analysis course](https://karpov.courses/) I've enrolled in January 2021.
2 |
3 |
4 |
5 | [Profit Monthly Overview](https://public.tableau.com/profile/nktn.lx#!/vizhome/ProfitMonthlyOverviewpractice2/ProfitMonthlyOverview) -- **Tableau Public dashboard** consisted of: KPIs, line chart, bar chart, table by region with bar charts, profit ratio by category with horizontal bar charts.
6 |
7 |
8 |
9 |
10 |
11 | Hope this repo will help you to assess my coding, data analytics and SQL skills or will be just fun for you to look through.
12 |
13 |
14 |
15 | --------------------------------------------
16 | Fill free to contact me via nktn.lx@gmal.com
17 | Follow me on twitter: @nktn_lx
18 | And here on github: github.com/nktnlx
--------------------------------------------------------------------------------
/2_hotel_bookings/README.md:
--------------------------------------------------------------------------------
1 | This is the second dataset analysed by me while passing [data analysis course](https://karpov.courses/) I've enrolled in January 2021.
2 |
3 |
4 | Hotel Bookings -- analising hotel bookings with Pandas. Read_csv, info, rename, groupby, agg, query, sort_values, idxmax, idxmin, value_counts, pivot methods were used for Exploratory Data Analysis. Customers **Churn rate** was calculated.
5 |
6 |
7 |
8 | Hope this repo will help you to assess my coding, data analytics and SQL skills or will be just fun for you to look through.
9 |
10 |
11 |
12 | --------------------------------------------
13 | Fill free to contact me via nktn.lx@gmal.com
14 | Follow me on twitter: @nktn_lx
15 | And here on github: github.com/nktnlx
--------------------------------------------------------------------------------
/30_vacancies_overview/README.md:
--------------------------------------------------------------------------------
1 | This is the 30th dataset analyzed by me while passing [data analysis course](https://karpov.courses/) I've enrolled in January 2021.
2 |
3 |
4 |
5 |
6 | [Analytics Vacancies Overview](https://public.tableau.com/profile/nktn.lx#!/vizhome/AnalyticsVacanciesOverviewpractice3/Dashboard1) -- **Tableau Public dashboard** consisted of: horizontal bar chart, pie chart, boxplot and bubble chart.
7 |
8 |
9 |
10 |
11 |
12 | Hope this repo will help you to assess my coding, data analytics and SQL skills or will be just fun for you to look through.
13 |
14 |
15 |
16 | --------------------------------------------
17 | Fill free to contact me via nktn.lx@gmal.com
18 | Follow me on twitter: @nktn_lx
19 | And here on github: github.com/nktnlx
--------------------------------------------------------------------------------
/31_sales_overview/README.md:
--------------------------------------------------------------------------------
1 | This is the 31st dataset analyzed by me while passing [data analysis course](https://karpov.courses/) I've enrolled in January 2021.
2 |
3 |
4 |
5 |
6 | [Sales Overview](https://public.tableau.com/profile/nktn.lx#!/vizhome/SalesOverviewpractice4/published) -- **Tableau Public dashboard** consisted of: horizontal bar tables, sparklines, KPI, line charts and various filters and sortings to display the data.
7 |
8 |
9 |
10 |
11 |
12 | Hope this repo will help you to assess my coding, data analytics and SQL skills or will be just fun for you to look through.
13 |
14 |
15 |
16 | --------------------------------------------
17 | Fill free to contact me via nktn.lx@gmal.com
18 | Follow me on twitter: @nktn_lx
19 | And here on github: github.com/nktnlx
--------------------------------------------------------------------------------
/32_airbnb_listings/README.md:
--------------------------------------------------------------------------------
1 | This is the 32nd dataset analyzed by me while passing [data analysis course](https://karpov.courses/) I've enrolled in January 2021.
2 |
3 |
4 |
5 |
6 | [Airbnb Listings Analytics](https://public.tableau.com/profile/nktn.lx#!/vizhome/LondonAirbnbListingsAnalyticalDashboardpractice5/Dashboard1) -- **Tableau Public dashboard** consisted of: calculated renting property occupation rate; analytical chart to choose the best property by occupation rate, review score and price per night; a ranked table of top 10 listings by calculated potential annual revenue; average price, average occupation rate and a number of unique listings KPIs; filters by neighbourhood, occupation rate and a number of reviews per the last twelve month.
7 |
8 | **dashboard_canvas.pdf** -- the result of an interview with a client before creating the dashboard that reflects all the main features the dashboard will have and a general description how it'll be used.
9 |
10 |
11 |
12 |
13 |
14 |
15 | Hope this repo will help you to assess my coding, data analytics and SQL skills or will be just fun for you to look through.
16 |
17 |
18 |
19 | --------------------------------------------
20 | Fill free to contact me via nktn.lx@gmal.com
21 | Follow me on twitter: @nktn_lx
22 | And here on github: github.com/nktnlx
--------------------------------------------------------------------------------
/32_airbnb_listings/dashboard_canvas.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nktnlx/data_analysis_course/5aa4ef8983b6ba5dc15e370750fa5b9022407918/32_airbnb_listings/dashboard_canvas.pdf
--------------------------------------------------------------------------------
/33_metrics_calc/README.md:
--------------------------------------------------------------------------------
1 | This is the 33rd dataset analyzed by me while passing [data analysis course](https://karpov.courses/) I've enrolled in January 2021.
2 |
3 |
4 |
5 | Metrics calculations -- Google analytics data cleaning and calculation of following metrics: number of unique users, conversion, average check, average purchases per user, ARPPU, ARPU.
6 |
7 |
8 |
9 |
10 |
11 | Hope this repo will help you to assess my coding, data analytics and SQL skills or will be just fun for you to look through.
12 |
13 |
14 |
15 | --------------------------------------------
16 | Fill free to contact me via nktn.lx@gmal.com
17 | Follow me on twitter: @nktn_lx
18 | And here on github: github.com/nktnlx
--------------------------------------------------------------------------------
/33_metrics_calc/metrics_calc.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "## Metrics calculation (mini-project)"
8 | ]
9 | },
10 | {
11 | "cell_type": "markdown",
12 | "metadata": {},
13 | "source": [
14 | "**Importing libraries**"
15 | ]
16 | },
17 | {
18 | "cell_type": "code",
19 | "execution_count": 98,
20 | "metadata": {},
21 | "outputs": [],
22 | "source": [
23 | "import pandas as pd"
24 | ]
25 | },
26 | {
27 | "cell_type": "markdown",
28 | "metadata": {},
29 | "source": [
30 | "**Importing dataset from a zipped file**"
31 | ]
32 | },
33 | {
34 | "cell_type": "code",
35 | "execution_count": 99,
36 | "metadata": {},
37 | "outputs": [
38 | {
39 | "data": {
40 | "text/html": [
41 | "
"
401 | ],
402 | "text/plain": [
403 | " name product_id date\n",
404 | "37 Anton_Ivanov 15 2\n",
405 | "92 Petr_Fedorov 94 2"
406 | ]
407 | },
408 | "execution_count": 672,
409 | "metadata": {},
410 | "output_type": "execute_result"
411 | }
412 | ],
413 | "source": [
414 | "fav_products = ( \n",
415 | " df.reset_index(drop=True) \n",
416 | " .drop_duplicates(subset=['product_id', 'date', 'name']) # removing duplicates by product_id, date, name -- in case someone bought the same product more than once per day\n",
417 | " .groupby(['name', 'product_id'], as_index=False) # grouping by name and product_id\n",
418 | " .agg({'date': 'count'}) # counting number of different dates when name and product_id are the same\n",
419 | " .query('date > 1') # filtering values less than one two obtain users who bought same products on different days\n",
420 | " ) \n",
421 | "\n",
422 | "fav_products"
423 | ]
424 | }
425 | ],
426 | "metadata": {
427 | "kernelspec": {
428 | "display_name": "Python 3",
429 | "language": "python",
430 | "name": "python3"
431 | },
432 | "language_info": {
433 | "codemirror_mode": {
434 | "name": "ipython",
435 | "version": 3
436 | },
437 | "file_extension": ".py",
438 | "mimetype": "text/x-python",
439 | "name": "python",
440 | "nbconvert_exporter": "python",
441 | "pygments_lexer": "ipython3",
442 | "version": "3.7.6"
443 | }
444 | },
445 | "nbformat": 4,
446 | "nbformat_minor": 4
447 | }
448 |
--------------------------------------------------------------------------------
/6_retail_in_germany/README.md:
--------------------------------------------------------------------------------
1 | This is the sixth dataset analysed by me while passing [data analysis course](https://karpov.courses/) I've enrolled in January 2021.
2 |
3 |
4 | Retail in Germany -- having a dataset with purchases of clients from Europe. Count basic sales statistics for clients from Germany. Duplicated, drop_duplicates, groupby, agg, query, sort_values, assign, quantile and str methods were used for Exploratory Data Analysis.
5 |
6 |
7 |
8 | Hope this repo will help you to assess my coding, data analytics and SQL skills or will be just fun for you to look through.
9 |
10 |
11 |
12 | --------------------------------------------
13 | Fill free to contact me via nktn.lx@gmal.com
14 | Follow me on twitter: @nktn_lx
15 | And here on github: github.com/nktnlx
--------------------------------------------------------------------------------
/7_error_in_transaction_data/README.md:
--------------------------------------------------------------------------------
1 | This is the seventh dataset analysed by me while passing [data analysis course](https://karpov.courses/) I've enrolled in January 2021.
2 |
3 |
4 | Error in Transactions Data -- we've found and corrected an error while analysing a dataset with transactions. Plotting data in logarithmic scale, converting data to datetime format as well as implementing describe, isna, sum, value_counts, groupby, agg, query, sort_values, rename, min, max and pivot methods were used for Exploratory Data Analysis.
5 |
6 |
7 |
8 | Hope this repo will help you to assess my coding, data analytics and SQL skills or will be just fun for you to look through.
9 |
10 |
11 |
12 | --------------------------------------------
13 | Fill free to contact me via nktn.lx@gmal.com
14 | Follow me on twitter: @nktn_lx
15 | And here on github: github.com/nktnlx
--------------------------------------------------------------------------------
/8_avocado_price/README.md:
--------------------------------------------------------------------------------
1 | This is the eighth dataset analysed by me while passing [data analysis course](https://karpov.courses/) I've enrolled in January 2021.
2 |
3 |
4 | Avocado Price -- Comparing avocado average, simple moving average and exponential weighted average price values. Categorizing delay data and labelling it. Plotting results with help of subplots and interactive Plotly plots.
5 |
6 |
7 |
8 | Hope this repo will help you to assess my coding, data analytics and SQL skills or will be just fun for you to look through.
9 |
10 |
11 |
12 | --------------------------------------------
13 | Fill free to contact me via nktn.lx@gmal.com
14 | Follow me on twitter: @nktn_lx
15 | And here on github: github.com/nktnlx
--------------------------------------------------------------------------------
/8_avocado_price/avocado_EWA.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nktnlx/data_analysis_course/5aa4ef8983b6ba5dc15e370750fa5b9022407918/8_avocado_price/avocado_EWA.jpg
--------------------------------------------------------------------------------
/8_avocado_price/avocado_SMA.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nktnlx/data_analysis_course/5aa4ef8983b6ba5dc15e370750fa5b9022407918/8_avocado_price/avocado_SMA.jpg
--------------------------------------------------------------------------------
/8_avocado_price/plotly_result.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nktnlx/data_analysis_course/5aa4ef8983b6ba5dc15e370750fa5b9022407918/8_avocado_price/plotly_result.png
--------------------------------------------------------------------------------
/9_ads_campaign/README.md:
--------------------------------------------------------------------------------
1 | This is the nineth dataset analysed by me while passing [data analysis course](https://karpov.courses/) I've enrolled in January 2021.
2 |
3 |
4 | Ads Campaign -- Plotting data in logarithmic scale to find the type of data distribution, finding ad_id with an anomalistict number of views. Comparing average and simple moving average views data. Categorizing clients' registration data and labelling it. Plotting results with help of interactive Plotly plot.
5 |
6 |
7 |
8 | Hope this repo will help you to assess my coding, data analytics and SQL skills or will be just fun for you to look through.
9 |
10 |
11 |
12 | --------------------------------------------
13 | Fill free to contact me via nktn.lx@gmal.com
14 | Follow me on twitter: @nktn_lx
15 | And here on github: github.com/nktnlx
--------------------------------------------------------------------------------
/9_ads_campaign/plotly_result.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nktnlx/data_analysis_course/5aa4ef8983b6ba5dc15e370750fa5b9022407918/9_ads_campaign/plotly_result.png
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Hi there!
2 |
3 |
4 | I'm learning to code, interested in data analytics and data science, aiming to be hired by the mid of 2021.
5 | This repository is for [data analysis course](https://karpov.courses/) I've enrolled in January 2021.
6 |
7 | The course curriculum includes the following technologies and topics mastered by me:
8 | 1. Python
9 | 2. Pandas
10 | 3. Numpy
11 | 4. Seaborn
12 | 5. Google APIs
13 | 6. Git
14 | 7. Airflow
15 | 8. SQL
16 | 9. ClickHouse
17 | 10. PostgreSQL
18 | 11. Redash
19 | 12. Superset
20 | 13. Statistics
21 | 14. A/B-tests
22 | 15. Bootstrapping
23 | 16. Amplitude
24 | 17. Tableau
25 | 18. DAU, MAU, ARPU, LTV, Retention, CR and other metrics
26 | 19. Product Development basics
27 | 20. Product Management basics
28 | 21. Soft-skills
29 |
30 |
31 |
32 |
33 |
34 | **List of projects:**
35 | 1. [Taxi in NYC](https://github.com/nktnlx/data_analysis_course/tree/main/1_taxi_in_nyc) -- analising NYC taxi orders with Pandas. Read_csv, rename, groupby, agg, query, sort_values, idxmax, idxmin, value_counts, pivot methods were used for **Exploratory Data Analysis**.
36 | 2. [Hotel Bookings](https://github.com/nktnlx/data_analysis_course/tree/main/2_hotel_bookings) -- analising hotel bookings with Pandas. Read_csv, info, rename, groupby, agg, query, sort_values, idxmax, idxmin, value_counts, pivot methods were used for Exploratory Data Analysis. Customers **Churn rate** was calculated.
37 | 3. [User Logs](https://github.com/nktnlx/data_analysis_course/tree/main/3_user_logs) -- analising customers data. Finding the most popular platform and the most active users. Visualizing data with **Seaborn** distplot, barplot and countplot methods.
38 | 4. [Taxi in Peru](https://github.com/nktnlx/data_analysis_course/tree/main/4_taxi_peru) -- analising taxi orders in Peru with Pandas. An Exploratory Data Analysis was performed. Drivers' score, passengers' score, **DAU** and **MAU** metrics were calculated and plotted with Seaborn.
39 | 5. [Raw Data Handling](https://github.com/nktnlx/data_analysis_course/tree/main/5_raw_data_handling) -- creating dataframe from a set of csv-files stored in various folders. Practicing Python skills to **automate data handling**.
40 | 6. [Retail in Germany](https://github.com/nktnlx/data_analysis_course/tree/main/6_retail_in_germany) -- having a dataset with purchases of clients from Europe. Count basic **sales statistics** for clients from Germany. Duplicated, drop_duplicates, groupby, agg, query, sort_values, assign, quantile and str methods were used for Exploratory Data Analysis.
41 | 7. [Error in Transactions Data](https://github.com/nktnlx/data_analysis_course/tree/main/7_error_in_transaction_data) -- we've found and corrected an error while analising a dataset with transactions. Plotting data in logarithmic scale, converting data to datetime format as well as implementing describe, isna, sum, value_counts, groupby, agg, query, sort_values, rename, min, max and **pivot** methods were used for Exploratory Data Analysis.
42 | 8. [Avocado Price](https://github.com/nktnlx/data_analysis_course/tree/main/8_avocado_price) -- comparing avocado average, simple **moving average** and exponential weighted average price values. Categorizing delay data and labeling it. Plotting results with help of subplots and interactive **Plotly** plots.
43 | 9. [Ads Campaign](https://github.com/nktnlx/data_analysis_course/tree/main/9_ads_campaign) -- plotting data in logarithmic scale to find the type of data distribution, finding ad_id with an anomalistic number of views. Comparing average and simple moving average views data. Calculating clients' registration to publishing ad conversion rate (**CR**). Categorizing clients' registration data and labeling it. Plotting results with help of interactive Plotly plot.
44 | 10. [Visits by Browser](https://github.com/nktnlx/data_analysis_course/tree/main/10_visits_by_browser) -- analising web-site visits. Defining proportion of real users and visits by bots. Finding the most popular browser for users and for bots. Bar-plotting results, downloading data using **Google Docs API** and merging it to our dataframe. Read_csv, groupby, agg, query, sort_values, pivot, fillna, assign and merge methods were used for Exploratory Data Analysis.
45 | 11. [Telegram Bot Airflow Reporting](https://github.com/nktnlx/data_analysis_course/tree/main/11_telegram_bot_airflow_reporting) -- reading an advertising campaign data from Google Docs spreadsheet, creating pandas dataframe to calculate clicks, views, **CTR** and money spent on the campaign. Calculating day by day change of the metrics, writing report with results to a txt file and sending this file via **telegram bot** to your mobile phone. The script is executed by **Airflow** every Monday at 12:00 p.m.
46 | 12. [SQL Tasks](https://github.com/nktnlx/data_analysis_course/tree/main/12_sql_task) -- **SQL** exercises done by me while passing this data analysis course. Clickhouse (via Tabix) was used to solve the tasks.
47 | 13. [NYC taxi & timeit optimization](https://github.com/nktnlx/data_analysis_course/tree/main/13_nyc_taxi_timeit_optimization) -- calculating distance of a ride using pick-up and drop-off coordinates. Compared a couple of ways to apply distance calculation to the dataframe. The optimization helped to decrease calculation run-time about 3276 times! Checked calculation results, found outliers using boxplot graphs and **descriptive statistics**. Fixed dataframe by removing outliers and found the cost of the longest ride.
48 | 14. [Bikes rent in Chicago](https://github.com/nktnlx/data_analysis_course/tree/main/14_bikes_rent_chicago) -- dates to dateformat conversion, **resampling data** to aggregate by days, automatically merging data from distinct files into one dataframe using os.walk(), differentiating bikes rents by user type, finding the most popular destination points overall and based on the week of the day.
49 | 15. [Bookings in London](https://github.com/nktnlx/data_analysis_course/tree/main/15_booking_in_london) -- used **Pandahouse** and SQL queries to import data from Clickhouse into pandas dataframe. Processed imported data and performed Exploratory Data Analysis. Built scatterplot, distplot, lineplot and heatmap using Seaborn and Matplotlib.
50 | 16. [Retail dashboard](https://github.com/nktnlx/data_analysis_course/tree/main/16_retail_dashboard) -- built a series of visualizations and a **dashboard** using SQL queries and **Redash**. Calculated and checked the dynamics of **MAU** and **AOV**. Found an anomaly in data, defined the market generating the majority of revenue, analyzed the most popular goods sold in the store. Wrote a dashboard summary with recommendation to push up sales.
51 | 17. [Video games](https://github.com/nktnlx/data_analysis_course/tree/main/17_video_games) -- analising video games sales dynamics with Pandas. Read_csv, head, columns, dtypes, info, isna, dropna, describe, mode, shape, groupby, agg, sort_values, rename, index, to_list, value_counts methods were user for **Exploratory Data Analysis**. Barplot, boxplot and lineplot were used for graphing results.
52 | 18. [Ads conversion](https://github.com/nktnlx/data_analysis_course/tree/main/18_ads_conversion) -- calculating **CTR, CPC, CR** metrics. Plotting them using distplot, hist, displot and histplot methods.
53 | 19. [Yandex Music](https://github.com/nktnlx/data_analysis_course/tree/main/19_yandex_music) -- analyzing music streaming platform songs popularity, comparing music preferences and listening templates in Moscow and Saint-Petersburg. Reading and **cleaning data**, renaming columns, removing duplicates, dealing with missing data, slicing dataframe to query required portion of data.
54 | 20. [Bikes rent in London](https://github.com/nktnlx/data_analysis_course/tree/main/20_bikes_rent_london) -- loading dataset, plotting rides count data, resampling timestamps, describing the main trends, looking for anomaly values by smoothing the data with a **simple moving average**, calculating the difference between the real data and smoothed data, finding **standard deviation** and defining the **99% confidence interval**. Then we compare values with the confidence interval to find data hikes and explain them.
55 | 21. [Delivery A/B](https://github.com/nktnlx/data_analysis_course/tree/main/21_delivery_ab) -- Finding how a new navigational algorithm has changed the delivery time of the service. Formulating null and alternative hypothesis and performing A/B test with help of **t-test**.
56 | 22. [App interface A/B](https://github.com/nktnlx/data_analysis_course/tree/main/22_app_interface_ab) -- Testing how images aspect ratio and a new order button design influence on the amount of orders placed by customers. Performed **Levene's test** to check group variance equality, **Shapiro-Wilk test** to check groups for normality, **one-way ANOVA** to check statistically significant difference between tested groups, **Tukey's test** to find statistically significant difference between groups, linear model multivariate analysis of variance, visualized and interpreted results, gave recommendations to put (or not to put) changes into production.
57 | 23. [Cars sales](https://github.com/nktnlx/data_analysis_course/tree/main/23_cars_sales) -- predicting cars sales price using **linear regression models** (statsmodels.api & statsmodels.formula.api). Finding statistically significant predictors.
58 | 24. [Bootstrap A/B](https://github.com/nktnlx/data_analysis_course/tree/main/24_bootstrap_ab) -- comparing results of **Mann-Whitney test** and **Bootstrap** mean/median running on data with and without outliers.
59 | 25. [Mobile App A/A](https://github.com/nktnlx/data_analysis_course/tree/main/25_mobile_app_aa) -- running **A/A test** to check data splitting system works well. Unfortunately, we were not able to pass the test (FPR was greater than significance value). Thus, we have to dig into data and find the reason of malfunction. After removing the corrupted data we were able to pass the A/A-test.
60 | 26. [Taxi Churn](https://github.com/nktnlx/data_analysis_course/tree/main/26_taxi_churn) -- performing Exploratory Data Analysis, defining churn, checking distributions for normality with **Shapiro-Wilk test**, plotting data using plotly and A/B testing four different hypothesis with **Chi-squared test, Dunn's test, Mann-Whitney U non-parametric test**.
61 | 27. [A/B simulation](https://github.com/nktnlx/data_analysis_course/tree/main/27_ab_simulation) -- performed a range of A/B tests to simulate how sample size and the magnitude of difference between samples influence A/B tests performance. Investigated situations when we could have a false positive error. Gained valuable **lessons on A/B tests performance**.
62 | 28. [Sales Monthly Overview](https://public.tableau.com/profile/nktn.lx#!/vizhome/SalesMonthlyOverviewpractice1/Dashboard1) -- **Tableau Public dashboard** consisted of: KPIs, line chart, bar chart, table by category with bar charts.
63 | 29. [Profit Monthly Overview](https://public.tableau.com/profile/nktn.lx#!/vizhome/ProfitMonthlyOverviewpractice2/ProfitMonthlyOverview) -- **Tableau Public dashboard** consisted of: KPIs, line chart, bar chart, table by region with bar charts, profit ratio by category with horizontal bar charts.
64 | 30. [Analytics Vacancies Overview](https://public.tableau.com/profile/nktn.lx#!/vizhome/AnalyticsVacanciesOverviewpractice3/Dashboard1) -- **Tableau Public dashboard** consisted of: horizontal bar chart, pie chart, boxplot and bubble chart.
65 | 31. [Sales Overview](https://public.tableau.com/profile/nktn.lx#!/vizhome/SalesOverviewpractice4/published) -- **Tableau Public dashboard** consisted of: horizontal bar tables, sparklines, KPI, line charts and various filters and sortings to display the data.
66 | 32. [Airbnb Listings Analytics](https://public.tableau.com/profile/nktn.lx#!/vizhome/LondonAirbnbListingsAnalyticalDashboardpractice5/Dashboard1) -- **Tableau Public dashboard** consisted of: calculated renting property occupation rate; analytical chart to choose the best property by occupation rate, review score and price per night; a ranked table of top 10 listings by calculated potential annual revenue; average price, average occupation rate and a number of unique listings KPIs; filters by neighbourhood, occupation rate and a number of reviews per the last twelve month.
67 | 33. [Metrics calculations](https://github.com/nktnlx/data_analysis_course/tree/main/33_metrics_calc) -- Google analytics data cleaning and calculation of following **metrics**: number of unique users, conversion, average check, average purchases per user, **ARPPU, ARPU**.
68 | 34. [Retention Analysis](https://public.tableau.com/profile/nktn.lx#!/vizhome/RetentionAnalysispractice6/Dashboard1) -- **Tableau Public dashboard** contains users retention and ARPU highlight tables.
69 | 35. [RFM analysis](https://github.com/nktnlx/data_analysis_course/tree/main/35_rfm_analysis) -- performed **RFM analysis**, built **LTV** heatmap and found insights about users segmentation.
70 | 36. [Probabilities](https://github.com/nktnlx/data_analysis_course/tree/main/36_probabilities) -- solving **probability theory problems** including AND/OR probabilities, Bernoulli trial and conditional probability (the Bayes theorem).
71 | 37. [Final project](https://github.com/nktnlx/data_analysis_course/tree/main/37_final_project) -- you're employed in a mobile games development company. A Product Manager gives you following tasks: find and visualize retention, make a decision based on the A/B test data, suggest a number of metrics to evaluate the results of the last monthly campaign.
72 |
73 |
74 |
75 | Hope this repo will help you to assess my coding, data analytics and SQL skills or will be just fun for you to look through.
76 |
77 |
78 |
79 | --------------------------------------------
80 | Feel free to contact me via nktn.lx@gmal.com
81 | Follow me on twitter: @nktn_lx
82 | And here on github: github.com/nktnlx
--------------------------------------------------------------------------------