Sosyal ağ analizi ile belirli bölgelerdeki değerlenebilecek arsaların tespiti -2

Merhabalar tekrar,

Bir önceki yazımızda analiz için gerekli dataların emlak sitelerinden nasıl temin edileceğini bahsetmiştik (Buradan birinci yazımıza geri dönebilirsiniz.)

Şimdi kaldığımız yerden devam edelim. Siteden analiz için gerekli verileri çektik ama veriler özel bilgi içerebileceğinden dolayı satıcı isimlerine numara vererek filtrelememiz gerekiyor. Maalesef bunun için de biraz java yazmamız gerekiyor 🙁 aslında ilk yazdığımız programa entegre edebiliriz ancak ileride belki kendi başına bir programa dönüşme ihtimalinden dolayı ayrı olarak yazma karar verdim.


import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
public class main {

public static void main(String[] args) {
File saveFilePath=new File("D:/MaskedResult.csv");

try {
List lines= Files.readAllLines(Paths.get("D://result.csv"));
lines.forEach(k->{
System.out.println(k);
});
int counter=1;
HashMap<String, Integer> mask= new HashMap<>();

for (String string : lines) {
String[] seperate=string.split(",");
if(seperate[0]=="locations")
continue;
mask.put(seperate[1], counter++);
}

BufferedWriter writer = new BufferedWriter(new FileWriter(saveFilePath.getAbsolutePath()));
writer.write("locations,owner,weight\n");

for (String string : lines) {
String[] seperate=string.split(",");
if(seperate[0]=="locations")
continue;
writer.write(seperate[0]+","+mask.get(seperate[1])+","+seperate[2]+"\n");
}

writer.flush();
writer.close();

saveFilePath=new File("D:/MaskedValues.csv");
writer = new BufferedWriter(new FileWriter(saveFilePath.getAbsolutePath()));
writer.write("owner,maskedValue\n");
Set ownerList=mask.keySet();
for (String string : ownerList) {

writer.write(string+","+mask.get(string)+"\n");
}
writer.flush();
writer.close();

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}

bir önceki programın çıktısı olan result.csv dosyası, bu programın girdisi olacak. Şöyle ki CSV dosyasında üç adet kolonun olduğunu daha öncesinde bahsetmiştim

  1. İlan yeri (location)
  2. İlan sahibinin ismi (owner)
  3. Belirli bir bölgede aynı ilan sahibinin kaç defa ilan verdiği (weight)

Şimdi 2. kolonu filtreleyeceğiz. Bu program çalışma sonunda 2 adet dosya üretecek;

  • MaskedResult.csv – bir önceki program ile aynı sonuç sadece ilan sahipleri rakam ile filtrelenmiş hali
  • MaskedValues.csv – Filtre numarası ve hangi kişiye denk geldiği gösteren dosya olacaktır. Biz tabii ki sadece filtrelenmiş numaralar üzerinden konuşacağız 🙂

Bütün bu süreç sonunda uğraşmak istemiyorsanız, analizde kullanacağımız dosyayı direk olarak buradan indirebilirsiniz.

Açıkçası asıl niyetim analizin cytoscape üzerinde nasıl yapıldığı değilde daha çok analiz sonucunun nasıl yorumlamamız gerektiği üzerine olacaktır. Eğer nasıl yapıldığına dair bir talep gelirse belki nasıl yapıldığına dair de bir yazı hazırlayabilirim. Ancak bu tarz yazılar sadece belirli bir grubun dikkatini çekeceğinden dolayı çokta fazla bir talep geleceğini açıkçası düşünmüyorum.

Analiz dataları cytoscape programından export ederek aldıktan sonra cytoscape.js kütüphanesini kullanarak javascript ile web sitesi için uygun halde entegre edebilirsiniz. Bu kütüphane ile node ve edge’ler arasında gezinmek için basit viewer ekleyebilirsiniz. Node ve edge’leri seçebilir, mouse scroll ileri geri hareketleri ile yakınlaşabilir veya uzaklaşabilirsiniz. Viewerın programlaması zamanında node style’ları ile oynayarak degree centrality ve closeness centrality gibi kavramları daha görsel hale getirebilirsiniz. Sadece bir noktaya değinmek istiyorum, mouse ile yakınlaştıktan sonra viewer da gezinmek için mouse’u biraz basılı tuttun ve pointer üzerinde yarı saydam bir daire oluşacaktır. Ondan sonra viewerda istediğiniz yere doğru çekerek gezinebilirsiniz. Evet şimdi gelelim sonuçları yorumlamaya…

Name Degree BetweennessCentrality ClosenessCentrality
Akse Mahallesi 20 0.30614335 0.09303808
Duraçalı Köyü 13 0.10503012 0.08034117
Çınarlı Mahallesi. 11 1.0 1.0
Kocakaymaz Köyü 11 0.28222401 0.10247412
Tahtalı Köyü 11 0.27100653 0.09702608
Geredeli Köyü 10 0.16886388 0.08947449
Alihocalar Köyü 10 0.03061045 0.07764925
Özgürlük Mahallesi 10 0.0416084 0.08313167
Mollafeneri Köyü 9 0.11682678 0.08418625
Duraklı Köyü 9 0.1233357 0.0816669
Piri Reis Mahallesi 9 0.10205832 0.05831253
Pelitli Köyü 9 0.07028195 0.08346434
Emek Mah. 8 0.02384924 0.08676274
Terziler Köyü 8 0.02384924 0.07673105
Karagöllü Köyü 8 0.10176805 0.09218627
Cami Mahallesi 8 0.14436429 0.07344988
Ahmethacılar Köyü 8 0.04636779 0.08879428
Balçık Köyü 7 0.02045983 0.07517055
Sevindikli Köyü 7 0.16931992 0.0855427
Cumaköy Köyü 7 0.04253262 0.07942336
Topluca Köyü 7 0.06382316 0.08882129
Yeşilkent Mahallesi 7 0.10560633 0.06119669
Seyitaliler Köyü 7 0.0354108 0.07892959
Orhan Mahallesi 7 0.08421794 0.07933705
Yavuz Sultan Selim Mahallesi 7 0.02045983 0.0671033
Sarımeşe Hürriyet Mahallesi 7 0.04063183 0.04781007
İhsaniye Merkez Mahallesi 7 0.06049837 0.06085235
Bulduk Köyü 7 0.34822431 0.09991446
Denizli Köyü 6 0.19123394 0.08809775

Şimdi çıkan ilk 30 sonucu inceleyelim. Degree değerine göre listeyi sıralattığımızda Gebze’ye bağlı Akse mahallesinin en ipi göğüslediğini görüyoruz.

Genel olarak çevresine baktığımızda bu bölgedeki arsa fiyatlarının ortalama 200 bin TL civarında olduğunu görüyoruz. Çevresini incelediğinizde Gebze organize sanayi bölgesine yakın olması da bu bölgedeki arsa hareketliliğinin sebebini aslında açıklıyor. Ancak yatırım yapılabilmesi için daha stratejik bölgeleri bulmaya devam 🙂

Network’ü giant komponentten ayırdığımızda, ilan sahiplerinin adedini node kalınlıklarından anlayabiliyorsunuz. yani 707, 570, 286 ve 472 numaralı ilan sahipleri Akse mahallesini en iyi tanıyan kişiler olduğu yorumunu da yapabiliriz. Bu bölgedeki en çok arsa ilanı sahibi kişilerde bunlardır. Büyük ihtimal bu kişiler birer emlakçı ve birbirlerini tanıma ihtimali çok yüksektir. Bunların dışındaki numaralar büyük ihtimal bireysel satıcıları gösteriyor.

Şimdi akse mahallesinde degree değeri en yüksek olan 707 numaralı ilan sahibinin başka hangi yerlere ilan verdiği yerleri inceleyelim. İlan yerlerini incelediğinizde aralarında direk olarak herhangi bir bağ bulunmuyor. Ancak bu iki arsada ilk otuzun içinde.

Burada dikkatimi çeken başka bir nokta ise 570 ile 707 numaralı kişilerin Gebze’nin dışında ortak eleman olarak Derince’de de ilanları var. 570 numaralı kişide Derince karagöllü köyünde satılık arsası ve 707 numaralı kişininde Derince Tahtalı Köyünde satılık ilanı gözüküyor. Genel satış portföyünü incelediğinizde, Gebze bölgesinde alım satım işleri yapmalarına rağmen derince köyleriyle de ilgilenmişler.

286 numaralı kişi genel olarak Gebze bölgesi ile ilgileniyor. Bu kişi üzerinden başka bir bağlantı inceleyemiyoruz. Şimdi Degree değeri yüksek Duraçalı köyünü inceleyelim.

Akse mahallesinden sonra en yüksek degree değerine sahip olan duraçalı köyü, öne çıkan 795 ve 855 numaralı kişilerin bağlantılarını inceleyeceğiz. Ancak ondan önce aşağıdaki haritaya baktığımızda;

Köyün Kandıra merkez ile tatil yöresi olan Kefken arasında kaldığını görüyoruz. Çevre köylerdeki arsa fiyatlarını incelediğinizde ise yatırımlık için en uygun yerin burası olduğunu görüyorsunuz. Genel olarak fiyatlandırma yol kenarına yakın arsa fiyatları 100 bin TL ve civarında, uzak yerlerin ise 50 bin TL civarında konumlandırıldığını görebiliyorsunuz. Yolun üzerinden geçtiği Duraçalı’ya en yakın köyün Kıncıllı Köyünde Arsa fiyatlarının özellikle yola yakın yerlerin ortalama 200 bin TL olduğunu görebilirsiniz. Şimdide Duracalı köyünde ilan veren sahiplerin bunla beraber hangi bölgeler ile ilgilendiklerine de bakalım.

Köylere baktığımızda tamamı Kandıra’nın köyleri olduğunu görüyoruz. Duraçalı haricinde ki diğer tüm köyler Kandıra’nın altında kalan kalan bölgededir.

855 numaralı kişinin ilan listesine baktığınızda degree si en yüksek olan Balcı köyü, Kandıra’ya yakın ama ilgiden uzak  ancak fiyat olarak uygun gözüküyor. Bu bölgede yatırım yapılması düşünülüyorsa 795 numaralı kişi ile iletişime geçilmesinin daha uygun olacağı gözüküyor.

Degree sırasına göre 3. olan Derince – Çınarlı mah. incelediğimizde giant komponente bağlı olmadığını görüyoruz. Büyük ihtimal ilan sahipleri aynı zamanda arsa sahipleri olabilir. Çünkü hepsinin sadece 1 adet ilanı var ve hiç bir şekilde bir emlakçı ile bağlantıları yok.

Kocakaymaz köyünü incelediğimizde  köyün İzmitin kuzeyi ile kandıranın güneyinde konumlandığını görüyorsunuz

Genel olarak incelediğinizde D605 numaralı karayolu bu bölgedeki arsa fiyatlarını belirlemede önemli bir rol oynamış. Köyün yol düzergahında ve İzmite yakın olması bu bölgeyi tercih sebebi yapmış olduğunu düşünüyorum. Ancak arsa fiyatları ortalama olarak 150 bin TL üzerinde bu sebeple yatırım yapmaktan benim için uzak 🙂 Bu arada aslında ben kendim için değerlendiriyorum. Belki bu değerler sizin için uygun olabilir.

540 numaralı kişiyi incelediğimizde 1 ilan Karaabdülbaki köyünde bir kaç ilanda Bağlıca köyünden çıkıyor. Her ikisininde degree değerleri düşük olduğundan fazla değerlendirmeye katmıyorum.

Buraya kadar incelediğimiz alan içerisinde yatırım yapmaya en uygun yer Duraçalı olarak gözüküyor. Ancak listedeki ilk 10 bölge incelenip ileride yapılması muhtemel projelerle beraber değerlendirmesi en uygun olacaktır. Genel olarak emlakçıların elinde, degree değeri yüksek olmasa da Derince köylerinden satılık arsa var. Bu durum aslında gelecekte bu bölgelerin değerlenme ihtimalinin olduğunu gösteriyor.

Evet, beraber bir social network incelemesi yaptık. Eksik gördüğünüz veya konuşmak istediğiniz bir konu olursa, hiç çekinmeyin konuşabiliriz.

Umarım faydalı olmuştur.
Gökhan

http://www.gokhansaman.com/wp-content/plugins/sociofluid/images/google_48.png http://www.gokhansaman.com/wp-content/plugins/sociofluid/images/myspace_48.png http://www.gokhansaman.com/wp-content/plugins/sociofluid/images/facebook_48.png http://www.gokhansaman.com/wp-content/plugins/sociofluid/images/yahoobuzz_48.png http://www.gokhansaman.com/wp-content/plugins/sociofluid/images/twitter_48.png

Sosyal ağ analizi ile belirli bölgelerdeki değerlenebilecek arsaların tespiti -1

Merhabalar,

Yüksek lisansta aldığım sosyal network dersinde gördüklerimi özetleyebileceğim bir çalışma yaptım. Peki neydi bu derste öğrendiklerimiz? Kısa bir özet bilgi sonrasında tekrar konumuza girelim: Tam türkçesi çizge teorisi olan graph theory, Leonhard Euler tarafından 1736 yılında ilk temelleri atılıyor. Genel olarak iki farklı kümenin arasında ilişkileri inceliyor. Kümenin her bir elemanına node(Düğüm) ve bunlar arasındaki ilişkilere de edge olarak tanımlanıyor. Yapılan network analizi sonucunda küme elemanlarının konumunu belirleyen bazı olgular var mesela bunlardan birkaçı degree, closeness ve betwenness vb. dır. Bunların herbirini açıklamak bu yazı için gerçekten uzun olur ama en basitinden bir tanesini açıklamakta fayda var. Açıklaması en kolayı olan degree, küme içinde bir düğüme gelen edge sayısıdır.  İncelemede degree centrality’i kullanacağız. Buna ek olarak closenness’ı analizi anlattığım esnada açıklayacağım.

Şimdide biraz kullanıldığı alanlardan bahsedersem iyi olacak. 🙂 Çok ilginç alanlarda kullanıldığını ve gerçekten yorumlandığında ilginç bilgilerin çıktığını görüyorsunuz. Örneğin CIA tarafından kırmızı bültenle aranan isimleri aktif olarak kullanıldığının hakkında yayınlanan makaleler var (Saddam Hüseyinin yakalanışında kullanılan sosyal network analizini buradan okuyabilirsiniz.) veya Mısırda Arap baharı zamanında sosyal medyadan atılan facebook mesajları ve twitter twitlerini inceleyerek olayları başlatan kişi, kişileri veya ülkeleri ortaya çıkarmaya çalışan network analiz çalışmaları var. (Buradan okuyabilirsiniz) veya bu bahsettiklerimin dışında, gıda sektöründe ürün çıkaran firmaların yeni ürün çıkaracakları zaman farklı ülkelerde kullanılan gıda ürünlerinin içeriklerini sosyal network analizi ile belirleyerek farklı kültürlere göre ürünlerinin insanların damak tadına uygun ürünler çıkarmaya çalışılan makaleler var ve bunun gibi bir çok alan… Bilgi orada duruyor, yeter ki  o yığının içinden istediğimiz veriyi çıkarabilin..

Çok çok kısa bilgilendirmeden sonra konumuza geri dönersek;

Amacımız herhangi bir emlak sitesinden arsa ilanları ve ilan sahiplerinin bilgilerinden oluşan bir model kurmak olacaktır. Model ile ilgili varsayımlarım şunlardır;

  • Bir bölgede ne kadar çok ilan varsa o bölge o kadar popülerdir.
  • Bir satıcı birden fazla bölgelerde satış ilanı verebilir. Eğer bu farklılıklar ne kadar fazla olup ve bir bölgede yoğunlaşırsa bu bölge popüler olmaya adaydır.

Bölgedeki ilan sayısı graph teorisinde degree centrality’e işaret ediyor. Ne kadar çok ilan varsa o kadar edge sayısı olacaktır. Bu demek oluyor ki ilk olarak bakmamız gereken yer degree değerinin yüksek olmasıdır. Bu durum da ilk grup içerisinden eleme yapabilmemizi sağlayacaktır. Gelelim ikinci varsayıma… Bir satıcı birden fazla ilan verip ve birden fazla bölgeyle ilgileniyorsa bu kişinin emlakçı olduğunu gösterir 🙂 birden fazla emlakçının benzer bölgeyle ilgilendikleri bölgelerin kesişim kümesi de popülerliğin başka bir göstergesi olabilir. Ama dediğim gibi aslında bunlar modeli kurmak için varsayımlardır.

İlk olarak herhangi bir emlak sitesinden verilerin çekilebilmesi için gerekli olan Jsoup’un kullanımına;

Siteden verilerin çekilmesi için Java dilinde yazdığım program ile Cytoscape programıyla yapılan analiz, herhalde en az 2 hafta uğraşmışımdır. Lütfen okurken de unutmayın altında yatan emeği 🙂 Site ismini direk olarak vermeyeceğim onun yerine XYZ.com gibi bir notasyon kullanacağim. Hadi bakalım, ilk olarak XYZ.com emlak sitesinden Jsoup kütüphanesini kullanarak nasıl web scraper yapacağınızı anlatacağım. Başlayalım…

Maven projesi kullanıyorsanız aşağıdaki kodları POM’a eklemeniz gerekmektedir. Maven sizin yerinize kütüphaneyi indirecektir.


<dependency>
<!-- jsoup HTML parser library @ http://jsoup.org/ -->
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.10.2</version>
</dependency>

eğer maven projesi başlatmıyorsanız Jsoup’un sitesine gidip buradan kütüphaneyi bilgisayarınıza indirebilirsiniz. Daha sonrada indirdiğiniz bu kütüphaneyi projenize eklemeniz gerekiyor.

İndirilen tüm bilgileri arraylistte tutabilmek için küçük bir sınıf yazmanız gerekiyor. Ben indirdiğim sitenin adında bir sınıf oluşturmuştum. Bu yazı dizisindeki emlak sitesinin isim notasyonu olarak XYZ olacak tekrar hatırlatmakta fayda var.


import java.text.SimpleDateFormat;
import java.util.Date;

public class XYZ{
private String sahip;
private String mKare;
private String fiyat;
private Date ilanTarihi;
private String ilçe;
private String tamYer;
private int weight;
public XYZ(String sahip, String mKare, String fiyat, Date ilanTarihi, String ilçe, String tamYer) {
super();
this.sahip=sahip;
this.mKare = mKare;
this.fiyat = fiyat;
this.ilanTarihi = ilanTarihi;
this.ilçe = ilçe;
this.tamYer=tamYer;
}

public String getmKare() {
return mKare;
}
public void setmKare(String mKare) {
this.mKare = mKare;
}
public String getFiyat() {
return fiyat;
}
public void setFiyat(String fiyat) {
this.fiyat = fiyat;
}
public Date getIlanTarihi() {
return ilanTarihi;
}
public void setIlanTarihi(Date ilanTarihi) {
this.ilanTarihi = ilanTarihi;
}
public String getIlçe() {
return ilçe;
}
public void setIlçe(String ilçe) {
this.ilçe = ilçe;
}

public String getSahip() {
return sahip;
}

public void setSahip(String sahip) {
this.sahip = sahip;
}

public String getTamYer() {
return tamYer;
}

public void setTamYer(String tamYer) {
this.tamYer = tamYer;
}

@Override
public String toString() {
return "XYZ [Sahibi= "+sahip+" mKare=" + mKare + ", fiyat=" + fiyat + ",
ilanTarihi=" + ilanTarihi.toLocaleString()
+ ", ilçe=" + ilçe + "]";
}

public int getDayThrough(){
SimpleDateFormat format= new SimpleDateFormat("dd.MM.yyyy");
Date now=new Date();

long d1=now.getTime();
long d2=ilanTarihi.getTime();

return (int)Math.abs((d1-d2)/(1000*60*60*24));
}

@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((sahip == null) ? 0 : sahip.hashCode());
result = prime * result + ((tamYer == null) ? 0 : tamYer.hashCode());
return result;
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
XYZ other = (XYZ) obj;
if (sahip == null) {
if (other.sahip != null)
return false;
} else if (!sahip.equals(other.sahip))
return false;
if (tamYer == null) {
if (other.tamYer != null)
return false;
} else if (!tamYer.equals(other.tamYer))
return false;
return true;
}

public int getWeight() {
return weight;
}

public void setWeight(int weight) {
this.weight = weight;
}
}

şimdi de asıl koda gelelim. Aşağıdaki kodu çalıştırdığınızda, kod istenilen sayfalardan verileri çekerek “D:\” diskine Result.csv olarak dosyayı kayıt edecek.


import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import org.jsoup.Connection.Response;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

import domain.XYZ;

public class main {
private static int say=0;

public static void main(String[] args) {
File saveFilePath=new File("D:/result.csv");
ArrayList sahip=new ArrayList<>();
ArrayList sahipWeight=new ArrayList<>();

/*
*Verilen url isimli string parse edilecek adresi
*gösteriyor. Arama parametreleri ise;
*pagingSize gösterilen sayfadaki ilan adetini gösteriyor.
*pagingOffset ise hangi sayfada olduğunuzu gösteriyor.
*/
String url="https://www.XYZ.com/satilik-arsa/kocaeli?pagingOffset=50&amp;amp;amp;pagingSize=50";
try {
for (int a=0;a<951;a=a+50){ if(a>=1)
url="https://www.XYZ.com/satilik-arsa/kocaeli?pagingOffset="+a+"&amp;amp;amp;pagingSize=50";
Response response= (Response) Jsoup.connect(url).timeout(300000).execute();

//Bağlantı sağlanıp döküman parse ediliyor.
Document doc=response.parse();

// a[class='classifiedTitle'] ile DOM elemanı seçilip ilgilideğeri alınıyor.
//Diğer verilerde bu mantıkla yazılmıştır.
Elements detays=doc.select("a[class='classifiedTitle']");
Elements ids=doc.select("tr.searchResultsItem");
Elements mkares=doc.select("td.searchResultsAttributeValue");
Elements fiyat=doc.select("td.searchResultsPriceValue");
Elements dates=doc.select("td.searchResultsDateValue");
Elements locations=doc.select("td.searchResultsLocationValue");
//Herbir ilanın içine girilerek arsanın tam konumu ve ilan sahibinin verileri alınıyor.
for(int i=0;i<dates.size();i++){ String urlDetay="https://www.XYZ.com"+detays.get(i).attr("href"); Response responseDetay= (Response) Jsoup.connect(urlDetay).timeout(300000).execute(); Document docDetay=responseDetay.parse(); Elements sahips=docDetay.select("div[class='username-info-area']"); Elements tamYers=docDetay.select("h2 a"); sahip.add(new XYZ(sahips.get(0).text(), mkares.get(i).text(), fiyat.get(i).text(), fixDate(dates.get(i).text()), locations.get(i).text(), tamYers.get(2).text()) ); } } BufferedWriter writer = new BufferedWriter(new FileWriter(saveFilePath.getAbsolutePath())); writer.write("locations,owner,weight\n"); for (XYZ element : sahip) { sahip.stream().forEach( k->{

if(element.equals(k)){
say++;
}
});;
element.setWeight(say);
if(!sahipWeight.contains(element))
sahipWeight.add(element);
say=0;
}

//Tüm veriler alındıktan sonra yazma işlemine geçiliyor.
for (XYZ element : sahipWeight) {
//writer.write(element.getIlçe()+","+element.getSahip()+","+element.getDayThrough()+"\n");
writer.write(element.getTamYer()+","+element.getSahip()+","+element.getWeight()+"\n");
System.out.println(element.toString());
}

writer.flush();
writer.close();

} catch (IOException | ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

// Ayı rakam olarak ifade edebilmek için bir metot.
private static Date fixDate(String date) throws ParseException{
String[] parseDate=date.split(" ");
String mounth="";
SimpleDateFormat format= new SimpleDateFormat("dd.M.yyyy");
switch (parseDate[1]) {
case "Ocak":
mounth="01";
break;
case "Şubat":
mounth="02";
break;
case "Mart":
mounth="03";
break;
case "Nisan":
mounth="04";
break;
case "Mayıs":
mounth="05";
break;
case "Haziran":
mounth="06";
break;
case "Temmuz":
mounth="07";
break;
case "Ağustos":
mounth="08";
break;
case "Eylül":
mounth="09";
break;
case "Ekim":
mounth="10";
break;
case "Kasım":
mounth="11";
break;
case "Aralık":
mounth="12";
break;

default:
break;
}

return format.parse(parseDate[0]+"."+mounth+"."+parseDate[2]);
}

}

Aslında kodu biraz inceleye bilirseniz, şunu fark edeceksiniz ki aslında arka planda gereksiz çok fazla hesaplanan veri var. Bu veriler hesaplanıyor ancak en son programın çıktısı olan Result.csv dosyasına yazılmıyor. Bunun en büyük sebebi ise ilk başta tam olarak modeli oturtamamdan kaynaklanıyor. Aslında csv dosyasında analizde kullanılan kümeler kocaeli bölgesindeki arsa isimleri, ilan sahiplerinin isimleri ve ilan sahipleri aynı bölgeden kaç kez ilan verdiğidir.

Bu Jsoup hakkında yazdıklarıma ek olarak, hangi DOM elemanını nasıl bulunacağına dair kafanızda soru işaretleri varsa Jsoup sitesindeki Try Jsoup butonuna tıklayarak hangi DOM elemanını seçmeniz gerektiği konusunda sizi yönlendirecektir. (Buradan ulaşabilirsiniz.)

Bir sonraki yazımda kurduğumuz modelin yapısını ve cytoscape’te yapılan analizini inceleyeceğiz. Belki 3. bir yazı olarak da gephi ile bakabiliriz.

Görüşmek üzere
Gökhan

http://www.gokhansaman.com/wp-content/plugins/sociofluid/images/google_48.png http://www.gokhansaman.com/wp-content/plugins/sociofluid/images/myspace_48.png http://www.gokhansaman.com/wp-content/plugins/sociofluid/images/facebook_48.png http://www.gokhansaman.com/wp-content/plugins/sociofluid/images/yahoobuzz_48.png http://www.gokhansaman.com/wp-content/plugins/sociofluid/images/twitter_48.png