Saatnya move on dari excel ke BI

Ms excel telah menjad favorit hampir semua orang dalam hal pengolahan data. Hal ini disebabkan oleh mudahnya pengoperasian excel dibandingkan software lain. Namun semakin lama proses pengolahan data menjadi semakin kompleks  dan perhitungan yang dilakukan yg tadinya hanya melibatkan puluhan ribu baris berkembang menjadi jutaan baris. laporan /report yang tadinya hanya beberapa sheet berubah menjadi ratusan sheet. Sumber data yang tadinya hanya berupa csv berubah menjadi koneksi ke database dengan puluhan jenis konektor.

Saya sendiri mengalami perubahan ini dan mau tidak mau untuk beberapa pekerjaan saya harus beralih ke software yg lebih mumpuni. Jenis pekerjaan saya yang melibatkan jutaan row dan perhitungan yang cukup kompleks membuat excel menyerah dengan pesan “Not Responding” anda cukup beruntung jika sudah save, namun wassalam jika belum sempat save.

Beberapa alasan saya move on dari excel adalah sebagai berikut:

Memakan waktu yang lama

Apakah anda pernah melakukan vlookup ratusan ribu versus ratusan ribu row?? Nah coba aja deh, ntar juga tahu bagaimana lemotnya komputer anda, dengan standar ram 8gb dan core i5 saja  sudah cukup membuat komputer anda tersiksa. Belum lagi jika kolom-kolom anda terhubung dengan kolom yang lain. Ya sudah mending seduh teh dulu.

Excel tidak didesain untuk data discovery

Jika anda diberikan data yg sama sekali baru maka tahap yang perlu anda lakukan adalah DATA DISCOVERY. Buat summary table, buat scatter plot, buat bar chart dan lain2. Jika anda punya ratusa kolom maka sheet excel anda dipenuhi dengan ratusan chart.. wwidiiiih. Tentu saja ini jika anda belum ditambah anda punya puluhan excel sheet yg jumlahnya banyak dan anda perlu satukan semua file tsb.

Error perhitungan

Sudah banyak kasus dimana kesalahan dalam melakukan kalkulasi sehingga membuat perusahaan rugi milyaran. Anda tinggal googling saja jenis kesalahan dari excel dan anda akan melihat bagaimana kesalahan kecil perhitungan dapat membuat anda kaget dibuatnya.

Sharing report

Apakah report yang anda buat akan dibagikan keatas anda atau hanya anda pakai sendiri? Bentuk report anda masih ppt? Saya sangat mengerti betapa setiap bulan anda perlu merefresh dengan tekni copy paste. ya kan? Dengan BI tools anda tinggal set waktu untuk refresh data sesuai keinginan anda.

Mau tau lebih banyak tentang BI? Drop a comment or question below.

 

 

 

Advertisements

Membuktikan Kausalitas (Hubungan Sebab Akibat)

Rahmat.. proof to me did our last year investment increase our market share? I want to valid proof showing investment and increase of market share has causality effect.

Benarlah apa yg diajarkan di kelas data science bulan lalu yang sampai sekarang saya masih ingat. Yang paling penting dari data science itu adalah pertanyaanya! Pertanyaan bos saya itu juga menurut saya mahal dan jawabannya tidak mudah. Saya segera mencari statistical tools yg ada di kepala saya untuk menjawab pertanyaan tersebut tapi so far belum ada yg cocok. Better saya cari dulu bagaimana seharusnya kerangka berpikir untuk membuktikan hubungan kausalitas.

Jika mendengar kausalitas saya terus saja teringat sebuah kalimat correlation doesn’t imply causation. Ini adalah ilmu sejak kuliah namun saya belum  bertanya lebih lanjut.. lalu apa yg bisa membuktikan kausalitas? Nah ternyata tidak mudah membuktikan adanya kausalitas. Sebaliknya jika kita mampu membuktikan kausalitas maka kita bisa bercerita lebih banyak.

  • Supportive hubungan suatu variabel yg membuat variabel lain meningkat. Contohnya efek pemberian pupuk jenis tertentu dalam meningkatkan produksi panen padi atau pemberian jenis obat tertentu dalam menyembuhkan penyakit tertentu.
  • Prevention bisa juga kita mengatakan bahwa kita bisa menghindari terjadinya hal buruk atas tindakan tertentu. Misalnya penambahan rem jenis tertentu mengurangi angka tabrakan pada mobil atau motor.
  • Preparation  berguna untuk mempersiapkan diri atas konsekuensi tertentu. Misalnya banjir atau bencana

Dari ketiga hal diatas kasus saya sepertinya lebih cocok pada kondisi pertama yakni investasi dalam menaikkan market share. Hubungannya supportive,  oleh karena itu pendekatan rancangan percobaan (experimental design) sepertinya akan lebih cocok.

Hal-hal yg saya harus perhatikan adalah sebagai berikut:

  1. Kekuatan hubungan. Karena ini adalah kasus non-laboratorium saya tidak bisa mengkondisikan faktor-faktor yg terlibat selayaknya lab namun hubungan antar target bisa saya gambarkan dengan menggunakan korelasi.
  2. Replication. Naah ini dia juga yg lumayan njelimet bagaimana melakukan pengulangan jika kondisinya tidak seragam. Let me know jika ada ide ya guys!
  3. Specificity. Jika tidak ada penjelasan lain mungkin memang itulah penyebabnya.
  4. Temporality. Hubungannya akan lebih kelihatan jika akibat muncul setelah sebabnya.. (yg ini masih bingung nih)
  5. Gradient. Jika ada pola kenaikan atau penurunan yg jelas maka most likely ada kausalitas. Kayaknya kita bisa minta tolong regression untuk membuktikan ini.
  6. Plausability. help me with this.. hahaha
  7. Coherence. Jika sudah ada teori yg pernah menunjukkan adanya hubungan kausalitas maka data kita mungkin akan memperkuat teori tsb.

Kayaknya saya juga perlu untuk menambahkan beberapa catatan berikut sebelum melakukan perhitungan.

Periksa Metrik

  • Gunakan original metrik, hindari indexing dan rasio.
  • Lanjutkan dengan menghitung korelasi antar variabel.
  • Pastikan sample nya cukup untuk menarik kesimpulan.
  • Pastikan tidak ada outlier

 

Pastikan Hubungan

Dari scatter plot, perhatikan hubungan antar variable nya (gradientnya). Perhatikan juga urutan kejadiannya, karena bisa jadi akibatnya tidak terjadi pada waktu yg dekat. Sebaiknya di cek dengan lag pada time series analysis.

 

Validasi Penjelasan

Ada dua langkah yg kita bisa lakukan disini yakni eksperimen dan konsistensi. Dua hal ini adalah hal paling meyakinkan yg bisa kita lakukan, susunlah hipotesis dan buatlah sebuah pembuktian atas hipotesis tersebut. Sebaiknya kita gunakan vairable kontrol agar kita bisa membandingkan efek dari faktor yg kita berikan.

Source:

https://statswithcats.wordpress.com/2015/01/01/how-to-tell-if-correlation-implies-causation/ 

 

 

Basic Data Science Knowledge Part 2: Control Structure, Function dan Class

Dalam menuliskan code di python, adakalanya kita menghadapi perhitungan yg membutuhkan pengulangan. Nah sebagaimana di dalam bahasa pemrograman yg lain, di python juga ada cara melakukan looping untuk lebih mengefisienkan langkah kerja kita.

for i in range(20):
if i%3 == 0:
print i
if i%5 == 0:
print “Bingo!”
print “—“

Di python kita harus memperhatikan indentasi, jika indentasi kita tidak sesuai dengan format python maka proses looping tidak akan perjalan.

Function digunakan juga untuk mempermudah query yang kita buat. Jika kita mempunyai perhitungan yang cukup kompleks namun kita gunakan berulang-ulang maka ada baiknya kita menggunakan function untuk menyimpan perhitungan tadi.

>def kali(x,y):
z=x*y
return z

>kali(5,3)

15

Class

Jika kita membutuhkan sebuah environment yg terlepas dari environment default nya python. Maka salah satu cara untuk melakukan itu adalah dengan menggunakan class. Contoh penggunaan class adalah sebagai berikut

Contoh Class

class Product:
__vendor_message = “Ini adalah rahasia”
name = “”
price = “”
size = “”
unit = “”

def __init__(self, name):
print “Ini adalah constructor”
self.name = name
self.unit = “Gb”
self.size = 10

def get_vendor_message(self):
print self.__vendor_message

def set_price(self, price):
self.price = price

p = Product(“xtra combo”)
p.set_price(55000)

print “%s dengan ukuran %s %s harganya Rp. %d” % (p.name, p.size, p.unit, p.price)
# print p.__vendor_message

p.get_vendor_message()

p1 = Product(“xtra combo”)
p1.set_price(5000)

print “%s dengan ukuran %s %s harganya Rp. %d” % (p.name, p.size, p.unit, p.price)

Source for function: https://www.petanikode.com/tutorial/python

 

 

 

 

 

 

Basic Data Science Knowledge: Python (Part 1)

Python saat ini menjadi tren bahasa yg paling banyak digunakan dalam dunia data science. Walaupun ada bagian-bagian yang masih belum bisa menggantikan R, namun integrasinya dengan ekosistem HADOOP ini lah yang membuatnya menjadi sangat terkenal. Well, tulisan ini hanya catatan pribadi sebagai pengingat dan contekan kalau-kalau lupa.

Saya menginstall python dengan sepaket dengan hanya mendownload anaconda, jadi ringkas di dalamnya ada spyder, jupyter dkk buat GUI nya. Secara personal saya lebih suka menggunakan Jupyter karena formatnya yang mirip dengan R-markdown style di R studio.

Untuk show datanya kita bisa menggunakan

>print (“Hello world”)

Untuk menambahkan komentar bisa menggunakan

> # Ini komentar

Komentar sering bgt saya pakai sebagai pengingat alasan saya menggunakan query tsb. Juga sangat berguna jika query saya digunakan oleh orang lain.

List

Di python sangat flexible kita bisa bikin array yang isinya campur-campur kayak gini.

> a=[99,”cahaya”,[“dilangit”,”eropa”]]

Untuk slicer dari list juga cukup mudah, kita bisa menggunakan index yg selalu dimulai dari 0.

>a[0] hasilnya adalah 99

Berikut contoh lain

>b=range(5)

[0, 1, 2, 3, 4]

>b.append(5)

[0, 1, 2, 3, 4, 5, 5]

>b.pop() #untuk mengetahui jumlah data

5

Dictionary atau Associative Array

Cirinya tidak menggunakan index namun menggunakan keys sehingga kita melakukan fungsi seperti lookup. Keys yg digunakan di dictionary ini sifatnya IMMUTABLE yang artinya tidak boleh diubah-ubah

d = {“duck”: “eend”, “water”: “water”}
d

{'duck': 'eend', 'water': 'water'}

Cara lookupnya

d[“duck”]

‘eend’

Tuple

Hal lain yg perlu dikenal di python adalah tuple. Ciri-cirinya adalah menggunakan kurung ( ) untuk membentuk tuple. Sifat dari tuple juga IMMUTABLE  artinya isinya tidak bisa diubah-ubah.

nama =(‘rahmat’, ‘hid’)
nama

('rahmat', 'hid')

Jika ubah isi tuple nya, maka hasilnya adalah ERROR.

nama[0]=’coding’

Error bla bla xxxx– karena tuple tidak support item assignment

Tuple bisa berisi value, list ,dictionary, object, dan lain-lain.

Variable

variable juga jenis wadah untuk menyimpan value, di python kita tidak perlu melakukan DECLARE variable. Kita bisa langsung membuat variable dan mengisinya dengan value yg kita inginkan. Perbedaannya variable isinya bisa dirubah-rubah.

Pada dasarnya semua hal adalah variable baik itu class, modul maupun fungsi.

var=”isi dengan nilai”
var

'isi dengan nilai'

Kayaknya ini dulu saja untuk yg basic, lagi-lagi tulisan ini buat pengingat saja. Cara paling efektif adalah coba langsung ya guys.

 

 

 

CSS-Nearby search

/* Always set the map height explicitly to define the size of the div
* element that contains the map. */
#map {
height: 100%;
}
/* Optional: Makes the sample page fill the window. */
html, body {
height: 100%;
margin: 0;
padding: 0;
}
#right-panel {
font-family: ‘Roboto’,’sans-serif’;
line-height: 30px;
padding-left: 10px;
}

#right-panel select, #right-panel input {
font-size: 15px;
}

#right-panel select {
width: 100%;
}

#right-panel i {
font-size: 12px;
}
#right-panel {
font-family: Arial, Helvetica, sans-serif;
position: absolute;
right: 5px;
top: 60%;
margin-top: -195px;
height: 330px;
width: 200px;
padding: 5px;
z-index: 5;
border: 1px solid #999;
background: #fff;
}
h2 {
font-size: 22px;
margin: 0 0 5px 0;
}
ul {
list-style-type: none;
padding: 0;
margin: 0;
height: 271px;
width: 200px;
overflow-y: scroll;
}
li {
background-color: #f1f1f1;
padding: 10px;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
li:nth-child(odd) {
background-color: #fcfcfc;

lo {
background-color: #f1f1f1;
padding: 10px;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
lo:nth-child(odd) {
background-color: #fcfcfc;

}
#more {
width: 100%;
margin: 5px 0 0 0;
}

Java script-search nearby

// This example requires the Places library. Include the libraries=places
// parameter when you first load the API. For example:
// <script src=”https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places”&gt;

var map;

function initMap() {
// Create the map.-6.5404435,106.7970417
var pyrmont = {lat: -6.5404435, lng: 106.7970417};
map = new google.maps.Map(document.getElementById(‘map’), {
center: pyrmont,
zoom: 17
});

// Create the places service.
var service = new google.maps.places.PlacesService(map);
var getNextPage = null;
var moreButton = document.getElementById(‘more’);
moreButton.onclick = function() {
moreButton.disabled = true;
if (getNextPage) getNextPage();
};

// Perform a nearby search.
service.nearbySearch(
{location: pyrmont, radius: 500, type: [‘store’]},
function(results, status, pagination) {
if (status !== ‘OK’) return;

createMarkers(results);
moreButton.disabled = !pagination.hasNextPage;
getNextPage = pagination.hasNextPage && function() {
pagination.nextPage();
};
});
}

function createMarkers(places) {
var bounds = new google.maps.LatLngBounds();
var placesList = document.getElementById(‘places’);

for (var i = 0, place; place = places[i]; i++) {
var image = {
url: place.icon,
size: new google.maps.Size(71, 71),
origin: new google.maps.Point(0, 0),
anchor: new google.maps.Point(17, 34),
scaledSize: new google.maps.Size(25, 25)
};

var marker = new google.maps.Marker({
map: map,
icon: image,
title: place.name,
position: place.geometry.location
});

var li = document.createElement(‘li’);
li.textContent = place.name;
placesList.appendChild(li);

var lo = document.createElement(‘lo’);
lo.textContent = place.types;
placesList.appendChild(lo);

bounds.extend(place.geometry.location);
}
map.fitBounds(bounds);
}

Akibat regresi linear

Beberapa hari yg lalu saya tampil di depan rekan2 kerja saya dalam rangka sharing session yang biasanya dilaksanakan setiap jumat. Saya diminta utk menjelaskan apa saja6yg sudah dipelajari dari lynda.com. Itu lho situs belajar mandiri dari linkedin… Sebagai bentuk pertanggungjawaban sudah dapat akses premium jadilah hari itu saya maju.

Di lynda.com saya ambil beberapa course dasar seperti statistics foundation, data science dan juga business analytics. Saya semakin sadar bahwa gap skill yg saya miliki dibandingkan dengan ekspertis di luar sana. Fine. Dengan segala keterbatasan yang ada saya buat sebuah presentasi yg berjudul unboxing hubungan antar data. Isinya pokoknya menjelaskan kembali konsep korelasi dan juga regresi. Ternyataaaa hampir semua yg duduk menyaksikan gelisah berharap presentasi saya segera selesai… Hahaha. Walaupun demikian ada juga yg bertanya ttg konsep p-value. Damn!!

Finally presentasi berjalan dengan kegelisahan para hadirin…. Walaupun seminggu ini saya terus2an di godain dengan celetukan… Wooi datanya bisa diberesin tuh sama si rahmat pake regresi…. Wakakakak. Damn again!!

Presentasi data: Two long tail perspective…

Kerap kali saat anda sudah punya data dab anda punya kemampuan untuk melakukan penelitian, anda kesulitan untuk menyampaikan informasi kepada publik lewat susunan cerita yang menarik. Diskusi sore ini bersama big bos, saya menemukan sebuah pola pikir yang sangat menarik. Berawal dari saking banyaknya data yang kami miliki, kami kesulitan merangkai semua data itu menjadk sebuah cerita yang utuh. Hingga akhirnya muncul celetukan, pakai saja analisis two tail… Dalam hati.. Whaat? Baruu denger saya.

Pikiran saya langsung tertuju pada grafik sebaran normal dengan dua ekor dikiri dan dikanan. Bell Curve. Ternyata apa yg saya pikirkan terlalu rumit… Ternyata analisa ini sangat simpel namun dengan mengambil konsep sebaran data.

Kita pasti tahu bell curve… Nah dua tail atau ekor grafik ini menggambarkan posisi yang ekstrim dari data… Ekstrim besar dan ekstrim kecil… Misalkan kita menganalisis data sales maka salah satu opsi dalam menyampaikan informasi adalah dengan mengambil detail dari kedua tail. Ekstrim kanan menggambarkan sales yang penjualannya sangat tinggi, lets say top 95 percentile… Sedangkan di kiri kita ambil contoh untuk sales yg tidak achieve… Misalkan bottom 10 percentile. Dengan menggali detail kenapa kedua sales ini berada di sisi ekstrim sangatlah penting. Kita ingin agar sales yg ada dibagian tengah dapat mencontoh strategi sales yang berhasil dan menjauhi sales yg tdk achieve.

Harapan kita adalah nilai tengah dari sales yg skrg berkumpul ditengah dapat bergeser ke arah kanan yg secara total akan menaikkan sales performance secara keseluruhan.