Showing posts with label python. Show all posts
Showing posts with label python. Show all posts

Friday, September 8, 2017

Tutorial python untuk web scrapping (olah data dari web)

Dalam tutorial kali ini  saya akan memberikan petunjuk bagaimana menggunakan bahasa pemrograman python dalam melakukan web-scrapping (mengambil isi dari sebuah web-sites). Jadi kita mengambil informasi, semisal data-data pengumuman yang disematkan di web, tanpa perlu melakukan browsing manual web tersebut.

Untuk itu, pastikan di komputer Anda sudah terinstall interpreter python yang bisa diunduh di situs resminya. Jika sudah, maka di komputernya akan terlihat tempat instalasi python:

Friday, December 20, 2013

Menghitung bobot dan node pada Gauss Quadrature

Untuk menghitung integral berhingga dengan Gauss-Quadrature sebenarnya agak-agak rumit. Karena kita harus menempuh beberapa metode yang agak ruwet dan tidak mudah. Harus menyelesaikan sistem persamaan Linear dan lain-lain manipulasi aljabar yang membingungkan. Karena kita harus menghitung bobot dan node yang tergantung berapa nodenya. Tapi saya menemukan suatu source code di internet yang sudah menyelesaikan persoalan tersebut. Yakni
function [x,w]=lgwt(N,a,b)

% lgwt.m
%
% This script is for computing definite integrals using Legendre-Gauss 
% Quadrature. Computes the Legendre-Gauss nodes and weights  on an interval
% [a,b] with truncation order N
%
% Suppose you have a continuous function f(x) which is defined on [a,b]
% which you can evaluate at any x in [a,b]. Simply evaluate it at all of
% the values contained in the x vector to obtain a vector f. Then compute
% the definite integral using sum(f.*w);
%
% Written by Greg von Winckel - 02/25/2004
N=N-1;
N1=N+1; N2=N+2;

xu=linspace(-1,1,N1)';

% Initial guess
y=cos((2*(0:N)'+1)*pi/(2*N+2))+(0.27/N1)*sin(pi*xu*N/N2);

% Legendre-Gauss Vandermonde Matrix
L=zeros(N1,N2);

% Derivative of LGVM
Lp=zeros(N1,N2);

% Compute the zeros of the N+1 Legendre Polynomial
% using the recursion relation and the Newton-Raphson method

y0=2;

% Iterate until new points are uniformly within epsilon of old points
while max(abs(y-y0))>eps
    
    
    L(:,1)=1;
    Lp(:,1)=0;
    
    L(:,2)=y;
    Lp(:,2)=1;
    
    for k=2:N1
        L(:,k+1)=( (2*k-1)*y.*L(:,k)-(k-1)*L(:,k-1) )/k;
    end
 
    Lp=(N2)*( L(:,N1)-y.*L(:,N2) )./(1-y.^2);   
    
    y0=y;
    y=y0-L(:,N2)./Lp;
    
end

% Linear map from[-1,1] to [a,b]
x=(a*(1-y)+b*(1+y))/2;      

% Compute the weights
w=(b-a)./((1-y.^2).*Lp.^2)*(N2/N1)^2;
Di mana versi python-nya adalah:
import numpy as np 

np.set_printoptions(precision=4)

# fungsi untuk menghitung node-node pada gauss-quadrature
def lgwt(N, a , b):
    N = N -1 
    N1 , N2= N + 1, N+2 
    xu = np.linspace(-1,1, N1) 
    y =  np.cos(( 2* np.transpose(np.arange(0,N+1)) + 1  )\
    * np.pi / (2 * N + 2))  + (0.27 / N1 ) * np.sin(np.pi * xu * N / N2) ; 
    
    L = np.zeros([N1, N2])
    y0 = 2 
    
    while np.max(np.abs(y - y0 )) > spacing(1):
        L[:,0] = 1        
        L[:,1] = y
        
        for k in range(1, N1):
            L[:,k+1] = ((2*(k+1)-1)*y *L[:,k]-(k)*L[:,k-1])/(k+1)
        
        Lp=(N2)*(L[:,N1-1]-y * L[:,N2-1])/(1-np.power(y,2))   

        y0 = y 
        y = y0 - L[:, N2-1] / Lp
    
    N2 = float(N2) 
    N1 = float(N1)
    x = (a*(1-y ) + b * (1+ y) ) / 2
    w = (b-a) / ((1 -  np.power(y ,2 ) ) * np.power(Lp, 2) ) \
        * np.power(N2/N1 , 2) 
    return (x, w) 
    
(a , b ) = lgwt(12,-5,5) # untuk ngetes
print  a 
print  b 
Potongan eksekusinya adalah



Anda bisa mengkonfirmasi di buku nilai-nilai di atas.

Kebetulan dasar teorinya agak ribet, tapi saya menemukan salah satunya di internet juga yakni sebuah tesis magister. Yang bisa anda download di:
https://drive.google.com/file/d/0B1irLqfPwjq0RFhHQVpvaUVuWlk/edit?usp=sharing

Wednesday, December 18, 2013

Batas memori stack pada python dan matlab

Saya penasaran, bagaimana jika kita memplot sebuah fungsi sinusoidal hingga tak berhingga, apa yang terjadi. Maksudnya adalah bagaimana jika kita memplot \( \sin(\sin( \sin( \cdots x) \cdots )) \). Ternyata untuk software yang berbeda hasilnya beda pula. Untuk MATLAB kapasitasnya di batasi sampai 32 kurung bersarang. Sementara untuk python untuk 90 kurung bersarang. Berikut contohnya untuk MATLAB


dengan sourcenya:
function test_sin_sin
clc; 
x = linspace(0, 2*pi ); 
cut(2); 
cut(15); 
cut(30);  
    function cut(a)
    y = 'sin('; 
    for i=1:a,
        y = strcat(y,'sin('); 
    end
    y = strcat(y, 'x)'); 
    for i=1:a, 
        y = strcat(y, ')'); 
    end
    y = eval(y); 
    plot(x, y);
    hold on ; 
    end
end
Adapun untuk python adalah


dengan source-nya
# -*- coding: utf-8 -*-
"""
Created on Thu Dec 19 15:22:44 2013

@author: fajar
"""
x = linspace(-pi,pi, 1000); 
def  test(a):
    aa = 'sin('
    for i in range(a):
        aa += 'sin('
    aa += 'x)'
    for i in range(a):
        aa+= ')'
    yy = eval(aa); 
    plot(x, yy);
    
test(90)
        

Tuesday, July 2, 2013

Berkenalan dengan bahasa python

Pada kesempatan kali ini saya akan mencoba sedikit membahas tentang salah satu bahasa pemrograman yang cukup populer di dunia, yakni bahasa pemrograman python. Mengapa python, karena bahasa python merupakan salah satu bahasa yang bisa menghadirkan banyak fleksibilitas dengan kehandalan yang sudah diakui. Bagi saya python itu bahasa yang sangat fleksibel. Mungkin anda pernah punya pengalaman dengan bahasa semisal MATLAB atau sejenisnya. Tapi menurut saya bahasa tersebut terlalu kaku. Memang untuk para enggineer, MATLAB sudah menyediakan beberapa fitur built-in yang sangat membantu. Tapi jika dipikir-pikir dari sekian banyak fitur-fitur tersebut hanya sedikit saja yang benar-benar kita butuhkan. Yang lainnya merupakan fitur hasil abstraksi tingkat tinggi yang sebenarnya kurang begitu kita perlukan, atau bahkan sama sekali tidak sesuai dengan kebutuhan kita sehingga harus dimodifikasi lebih lanjut atau dicarikan alternatifnya.

Misalnya saja financial toolbox atau medical toolbox. Saya yakin kalo orang berkecimpung di dunia medis atau ekonomi, tentu sudah ada alat default yang biasa mereka gunakan yang spesifik untuk kebutuhan mereka ketimbang harus menggunakan MATLAB yang kurang populer di kalangan mereka. Bayangkan harga MATLAB berapa kemudian ukuran file instalasinya berapa, sementara yang kita butuhkan hanya operasi-operasi dasar matriks yang dalam bahasa lain pun sudah tersedia dengan gratis.

Python sendiri sebagai bahasa pemrograman punya domain penggunaan yang sangat luas di samping komunitasnya sangat aktif. Komunitas inilah yang menjadi penentu dalam pengembangan bahasa pemrograman. Kalo komunitasnya mandek otomatis bahasanya juga ikutan stagnan. Sementara kalo kita sudah sangat mahir di MATLAB atau beberapa bahasa pemrograman lainnya---kecuali kita seorang developer yang dihire untuk mempekerjakan proyek-proyek berbasis MATLAB---tentu lebih tertarik menggunakan bahasa-bahasa lain yang lebih interaktif dan free. Jika menguasai python, kecakapan tersebut bisa digunakan untuk kebutuhan lain misalnya untuk membangun aplikasi database atau aplikasi berbasis web. Sementara jika cuma tahu MATLAB, g ada yang bisa dilakukan (setidaknya di Indonesia ini). Bahkan di laboratorium fisika di seluruh dunia bahasa yang dipakai pun bukan MATLAB melainkan fortran atau C. Sementara untuk tahu bahasa fortran dan C, sebagai langkah awal kita harus belajar dulu bahasa yang konsepnya mudah dipahami semacam python.

Tapi ini perspektif pribadi. Anda boleh saja punya pendapat lain yang mungkin saja lebih shahih. Yang jelas untuk perkenalan saya akan memberikan sebuah potongan operasi dasar pada python. Kebetulan python sendiri merupakan bahasa yang sedikit banyak terinspirasi dengan bahasa Lisp---yakn penyerapan konsep List ke dalam struktur bahasanya----maka saya akan menggunakan konsep list tersebut yang kebetulan juga baru-baru ini saya pelajari:D.

Untuk mulai menggunakan python, terlebih dahulu kita mesti mendownload file instalasinya di https://code.google.com/p/winpython/. Sebagai perkenalan, berikut saya berikan sebuah listing tentang operasi perkalian matrix di python. Kebetulan saya sedang membuat buku (dalam bahasa Indonesia) untuk pemrograman di python---Masalahanya kalo dalam bahasa Inggris sangat melimpah di internet. Jadi penjelasannya menyusul di belakang.