January 2005 - Posts

Live from ASP.NET Camp di KaliMalang (hari ke-2)

Yaah..sedih deh berpisah ama peserta. Padahal mereka lagi semangat-semangatnya. Mereka pada nanyain loh ada kelanjutannya gak. Soalnya materi yang di dapat dirasa masih kurang banget. Lagian, kalo mau dapet semua ya harus 2 hari nginep (gak mandi kali. huuu....bauuu..) Tapi sejauh ini semangat mereka dan rasa ketertarikan mereka ama .NET semakin meningkat. Dan kayaknya mereka jadi tambah cinta deh ama .NET (hehehe .NET Lover, just like me). Mas Choirul, kata peserta kapan nih kelanjutan dari training ini ? Hayo daerah mana yang mau menyusul ? (kata Mas Choirul)
Share this post: | | | |
Posted by agung | with no comments

Live from ASPNET Camp di Kali Malang

Minat peserta sangat luar...luar ... luar biasa.
Pertanyaan banyak sekali yang dilontarkan, penjelasan juga
Semangat mereka membakar semangatku.

Tak ada kata yang lebih tepat kecuali....GUYS, YOU ARE GREAT !

Share this post: | | | |
Posted by agung | 2 comment(s)

Linear Regression

Fyuuhh...akhirnya selesai juga perjuangan ini. :-)
Aku post ajah fungsi untuk menghasilkan persamaan linear + chartnya siapa tahu ada gunanya.

Private Function getPredictedY(ByVal Slope As Double, _
       
ByVal XValue As Double, _
       
ByVal YInt As Double) As String
   Dim PredictedY As Double = (Slope * XValue) + YInt
   Return (PredictedY.ToString("###.###"))
End Function

Private Function getSlope(ByVal SumXY As Double, ByVal SumXX As Double) As Double
  
Return (SumXY / SumXX)
End Function

Private Function getSumXY(ByVal dsSource As DataSet, _
         
ByVal XMean As Double, _
         
ByVal YMean As Double, _
         
ByVal intData As Integer) As Double
   Dim SumXY As Double
   Dim intCounter As Integer
   For intCounter = 1 To intData
       
SumXY += SumXY + ((intCounter - XMean) * _
                       (dsSource.Tables(0).Rows(0)(intCounter - 1) - YMean))
   Next
   Return SumXY
End Function

Private Function getSumXX(ByVal XMean As Double, ByVal intData As Integer) As Double
   Dim SumXX As Double
   Dim intCounter As Integer
   For intCounter = 1 To intData
      SumXX = SumXX + (intCounter - XMean) * (intCounter - XMean)
   Next
   Return SumXX
End Function

Private Function getSumYY(ByVal dsSource As DataSet, _
         
ByVal YMean As Double, _
         
ByVal intData As Integer) As Double
   Dim SumYY As Double
   Dim intCounter As Integer
   For intCounter = 1 To intData
      SumYY = SumYY + ((dsSource.Tables(0).Rows(0)(intCounter - 1) - YMean) * _
                  (dsSource.Tables(0).Rows(0)(intCounter - 1) - YMean))
   Next
   Return SumYY
End Function

Private Function getMeanY(ByVal dsSource As DataSet, ByVal intData As Integer) As Double
   Dim dblMean, dblSum As Double
   Dim intCounter As Integer
   For intCounter = 1 To intData
      dblSum = dblSum + dsSource.Tables(0).Rows(0)(intCounter - 1)
   Next
   dblMean = dblSum / intData
   Return dblMean
End Function

Private Function getMeanX(ByVal intBulan As Integer) As Double
   Dim dblMean, dblSum As Double
   Dim intCounter As Integer
   For intCounter = 1 To intBulan
      dblSum = dblSum + intCounter
   Next
   dblMean = dblSum / intBulan
   Return dblMean
End Function

Private Function getYInt(ByVal YMean As Double, _
          
ByVal Slope As Double, _
          
ByVal XMean As Double) As Double
   Return (YMean - (Slope * XMean))
End Function

Dan berikut ini adalah fungsi pemanggilnya:

Private Sub GenerateEquation(ByVal dsSource As DataSet, ByVal strForecast As String)
   Dim dblSumYY, dblSumXX, dblSumXY As Double
   Dim dblYMean, dblXMean, dblYInt As Double
   Dim dblSlope As Double
   Dim n, Forecast As Integer
   Dim r As DataRow
   Dim intBulanTersedia As Integer = dsSource.Tables(0).Columns.Count()
   Dim intBulanKurang As Integer = 12 - intBulanTersedia
   Dim intBulanMulai As Integer = intBulanTersedia + 1
   Dim intData As Integer = intBulanTersedia

   Forecast = CType(strForecast, Integer)

   ' Initialize to get formula
   ' y=mx+b
   ' -------------------------

   dblXMean = getMeanX(intData)
   dblYMean = getMeanY(dsSource, intData)
   dblSumXX = getSumXX(dblXMean, intData)
   dblSumYY = getSumYY(dsSource, dblYMean, intData)
   dblSumXY = getSumXY(dsSource, dblXMean, dblYMean, intData)
   dblSlope = getSlope(dblSumXY, dblSumXX)
   dblYInt = getYInt(dblYMean, dblSlope, dblXMean)

   If Forecast <> 0 Then
      For n = intBulanMulai To Forecast
          dsSource.Tables(0).Columns.Add(n)
          dsSource.Tables(0).Rows(0)(n - 1) = getPredictedY(dblSlope, n, dblYInt)
      Next
   End If

   ' Construct trendlines
   ' --------------------
   Dim dsTrendline As New DataSet("dsTrendline")
   Dim dtTrendline As New DataTable("tblTrendline")
   Dim rTrendline As DataRow
   Dim szBulan As String

   dsTrendline.Tables.Add(dtTrendline)

   ' Clean up Columns and Rows
   ' -------------------------

   dsTrendline.Tables(0).Rows.Clear()
   dsTrendline.Tables(0).Columns.Clear()

   rTrendline = dsTrendline.Tables(0).NewRow()

   For n = 1 To dsSource.Tables(0).Columns.Count()
      If n < 10 Then
         szBulan = "0" & n.ToString()
      Else
         szBulan = n.ToString()
      End If
      dtTrendline.Columns.Add(New DataColumn(szBulan))
      rTrendline(szBulan) = getPredictedY(dblSlope, n, dblYInt)
   Next

   dtTrendline.Rows.Add(rTrendline)

   ' Construct chart
   ' ---------------

   GenerateChart(dsSource, dsTrendline, False)

   lblRumus.Text = "Formula: y = " & dblSlope.ToString() & "x + " & dblYInt.ToString()

End Sub

Dengan menggunakan komponen WebChart, buatlah chartnya :

Private Sub GenerateChart(ByVal pDS As DataSet, _
             
ByVal pDSTrendline As DataSet
)

Dim n As Integer
Dim intColumn, intColumnTrendline As Integer
Dim chartOriginalData As New WebChart.ChartPointCollection
Dim chartTrendlineData As New WebChart.ChartPointCollection

' Construct default Chart first
' -----------------------------

intColumn = pDS.Tables(0).Columns.Count() - 1
For n = 0 To intColumn
  chartOriginalData.Add(
New WebChart.ChartPoint(pDS.Tables(0).Columns(n).ColumnName(), _
                              pDS.Tables(0).Rows(0)(n)))
Next

' Construct Trendline
' -------------------

intColumnTrendline = pDSTrendline.Tables(0).Columns.Count() - 1

For n = 0 To intColumnTrendline
chartTrendlineData.Add(
New WebChart.ChartPoint(pDSTrendline.Tables(0).Columns(n).ColumnName(), pDSTrendline.Tables(0).Rows(0)(n)))
Next

Dim chartTypeOriginalData As New WebChart.LineChart(chartOriginalData, _
                                                           Color.Black)
Dim chartTypeTrendlineData As New WebChart.SmoothLineChart(chartTrendlineData, _
                                                           Color.Red)

chartTypeOriginalData.DataLabels.Visible = True
chartTypeTrendlineData.DataLabels.Visible = False

chartDetails.Charts.Add(chartTypeOriginalData)
chartDetails.Charts.Add(chartTypeTrendlineData)

chartDetails.Visible = True

chartDetails.RedrawChart()
End Sub

Tadaaa....dan terbentuklah chart yang diinginkan

Share this post: | | | |
Posted by agung | 1 comment(s)