Bilgisayar Programlamasına ve Veri Analizine Giriş - VIII Erkay Savaş Sabancı Üniversitesi Lise Yaz Okulu.

Download Report

Transcript Bilgisayar Programlamasına ve Veri Analizine Giriş - VIII Erkay Savaş Sabancı Üniversitesi Lise Yaz Okulu.

Bilgisayar Programlamasına ve
Veri Analizine Giriş - VIII
Erkay Savaş
Sabancı Üniversitesi
Lise Yaz Okulu
2015
Modül 8 için Planımız
• Gerçek TWEET verilerini inceleyeceğiz
07.11.2015
Sabancı Üniversitesi Lise Yaz Okulu
2
TWEET Dosyası
• Biz bu dosyayı turkcell.txt adı altında saklıyoruz.
• TWEET örnekleri:
itscoollana @SeaIsAnIdiot bu sarqi benden sana gelsin turkcell @Turkcell Tue Jul 22 13:06:39 EET 2014
medceziirnet
Tesekkurler turkcell sen olmasan bana mesaj atanda yokk ^^ @Turkcell
Tue Jul 22
14:03:28 EET 2014
974
AnnaLianaUyar
@Turkcell #turkcell Yolladiginiz kol gibi faturaya sonsuz tesekkurler ?
Tue Jul 22
16:54:10 EET 2014
273
TechnopatNet
Turkcell Akilli Otomobil Platformu tanitiliyor #turkcell #akilliotomobil
http://t.co/X2WSBFxaXA Fri Jul 11 10:43:26 EET 2014
3362
Fehmi_Y_ Iyiki Turkcell liyim hepsi ni kullandim ama en güzel Turkcell
Sun Jul 13 13:43:49 EET 2014
GkcAyhan Turkcell beni sesimden tanir he he tanir emin ol ? @Turkcell
Wed Jul 09 13:53:02 EET 2014
basakbasak78
RT @emaybo: @Turkcell çözüm bulmayan bir firmadan hizmet almak!!! #turkcell
Jul 17 22:45:40 EET 2014
73
son_er_ak RT @zuhalbalkas_: @TurkcellHizmet Turkcell müsteri hizmetleri nerede ??? Turkcell e yakismiyor!!
Jul 22 10:02:26 EET 2014
758
anti_hashasiRT @zuhalbalkas_: @TurkcellHizmet Turkcell müsteri hizmetleri nerede ??? Turkcell e yakismiyor!!
Jul 22 10:02:27 EET 2014
1105
07.11.2015
Sabancı Üniversitesi Lise Yaz Okulu
1657
3378
174
Thu
Tue
Tue
3
Toplam Tweet Sayısı
• Bize verilen data dosyasında satır başına bir tweet
geldiği söyleniyor. Böylece aşağıdaki kod kaç tweet
olduğunu bize söylüyor.
• Toplam tweet sayısını bulan bir fonksiyon yazalım
def toplamTweet(liste):
liste_eleman_sayisi = len(liste)
return liste_eleman_sayisi
turkcell_tweet = open("turkcell.txt", "r")
tweet_listesi = turkcell_tweet.readlines()
toplam_tweet_sayisi = toplamTweet(tweet_listesi)
print toplam_tweet_sayisi
07.11.2015
Sabancı Üniversitesi Lise Yaz Okulu
4
Nasıl Yaptık?
• Öncelikle data dosyasını açtık
• ‘tweet_listesi’ isimli bir değişkende (str) saklıyoruz.
• Sonra da tweet_listesi isimli listeye her satır bir
eleman olacak şekilde tweetleri yazdık
...
turkcell_tweet = open("turkcell.txt", "r")
tweet_listesi = turkcell_tweet.readlines()
toplam_tweet_sayisi = toplamTweet(tweet_listesi)
print toplam_tweet_sayisi
07.11.2015
Sabancı Üniversitesi Lise Yaz Okulu
5
Toplam Retweet Sayısı
•
•
•
•
Öncelikle elimizdeki veri dosyasını incelemeliyiz.
Tweet’lerin nasıl yazıldığını öğrenmeli/anlamalıyız.
Retweet’leri nasıl buluruz, ayırd edici özelliği nedir
Aşağıda veri dosyamızdan üç tane örnek retweet var.
Gizemsoylu34 RT @TunaOnurOztekin: Turkcell Müsteri
Hizmetleri ??? Tue Jul 08 16:09:23 EET 2014 604
Cengiiz41 RT @HadesPoeta: Ve sonunda. Türkcell @Turkcell
Fri Jul 11 20:51:16 EET 2014 161
T_ygmr RT @Maviliadamm: Turkcell bayramimi niye
kutlamadin askim.
Mon Jul 28 21:38:52 EET 2014
167
07.11.2015
Sabancı Üniversitesi Lise Yaz Okulu
6
Toplam Retweet Sayısı
• Aralarındaki ortak noktayı görebilen var mı?
• Gizemsoylu34 RT @TunaOnurOztekin: Turkcell Müsteri
Hizmetleri ??? Tue Jul 08 16:09:23 EET 2014
604
• Cengiiz41 RT @HadesPoeta: Ve sonunda. Türkcell
@Turkcell Fri Jul 11 20:51:16 EET 2014
161
• T_ygmr RT @Maviliadamm: Turkcell bayramimi niye
kutlamadin askim.
Mon Jul 28 21:38:52 EET 2014
167
07.11.2015
Sabancı Üniversitesi Lise Yaz Okulu
7
Ortak Notka
• Retweetlerde 2. kelime her zaman ‘RT’
• Ve ondan bir sonraki kelime her zaman ‘@’ simgesi
ile başlayıp bir kullanıcı ismi ile devam etmekte.
• Demek ki
– data dosyamızda herhangi bir satırın 2. kelimesi ‘RT’ ise ve
3. kelimesi ‘@’ ile başlıyorsa biz bu satırın bir retweet
olduğunu söyleyebiliriz.
• Retweet olmayıp da bu koşulları sağlayan satırlar
olabilir
– ama bunun olasılığı çok düşük olduğundan dikkate
almıyoruz.
07.11.2015
Sabancı Üniversitesi Lise Yaz Okulu
8
O Zaman Kodumuzu Yazalım
def toplamReTweet(liste):
sayi = 0
for index in range(len(liste)):
satir = liste[index].split()
if satir[1] == 'RT' and satir[2][0] =='@':
sayi += 1
return sayi
toplam_retweet_sayisi = toplamReTweet(tweet_listesi)
print toplam_retweet_sayisi
07.11.2015
Sabancı Üniversitesi Lise Yaz Okulu
9
Nasıl Yaptık?
• Toplam retweet sayısını saklamak için ‘sayi’ değişkenini
kullandık.
• Ne zaman bir retweet bulunursa o değişkene 1 ekledik
• Fonksiyonun sonunda sayı değişkenini geri döndürdük
(return).
def toplamReTweet(liste):
sayi = 0
for index in range(len(liste)):
satir = liste[index].split()
if satir[1] == 'RT' and satir[2][0] =='@':
sayi += 1
return sayi
07.11.2015
Sabancı Üniversitesi Lise Yaz Okulu
10
Nasıl Yaptık?
• Her bir tweet’i tek tek kontrol etmemiz gerekli.
• Binlerce defa aynı şeyi yazmak yerine for döngüsü
kullanıyoruz.
• Kaç defa tekrar edeceği listemizin uzunluğuna bağlı.
def toplamReTweet(liste):
sayi = 0
for index in range(len(liste)):
satir = liste[index].split()
if satir[1] == 'RT' and satir[2][0] =='@':
sayi += 1
return sayi
07.11.2015
Sabancı Üniversitesi Lise Yaz Okulu
11
Nasıl Yaptık?
• Tekrar edilecek işlem:
– her bir satırı retweet mi değil mi diye kontrol etmek
– Önce tek bir tweet’i alıp split() fonksiyonu ile parçalara
(kelimelere) bölüyorüz.
def toplamReTweet(liste):
sayi = 0
for index in range(len(liste)):
satir = liste[index].split()
if satir[1] == 'RT' and satir[2][0] =='@':
sayi += 1
return sayi
07.11.2015
Sabancı Üniversitesi Lise Yaz Okulu
12
En Çok Tweet Atılan Gün
• Tweet’lerin içerisinde tarih verisi bulunmakta, yani
her birinin tek tek üstünden geçip hangi gün çıkarsa o
güne +1 eklememiz gerekli.
• 7 tane farklı gün değişkeni yapmaktansa tek bir
sözlük yaratıp günleri içlerine koyabiliriz.
• Twitter verimizde günlerimiz şu formatta:
Mon, Tue, Wed, Thu, Fri, Sat, Sun
– Yani string tipi değişken kullanabiliriz
07.11.2015
Sabancı Üniversitesi Lise Yaz Okulu
13
Gün Verisi Tweet’in Neresinde?
• Örnek Tweet’lere bakalım
d_cuneyt Turkcell Sun Jul 06 22:32:33 EET 2014
1
ozdemirmustafaa @Turkcell Turkcell T50yi üretiyor... Fri Jul
11 16:09:42 EET 2014 55
areuslnbthn
tesekkurler @Turkcell Tue Jul 01 00:50:18
EET 2014
260
• Gün verisinin her bir satırda sondan 7.
element/kelime olduğunu görebiliyoruz.
07.11.2015
Sabancı Üniversitesi Lise Yaz Okulu
14
O Zaman Başlayalım
• Elimizdeki bu bilgiler ile her bir tweet’in hangi gün
atıldığını öğrenip o güne artı 1 ekleyebiliriz.
• Önce bir dictionary değişkeninin nasıl tanımlandığını
hatırlayalım
• gun_sayaci = {'Mon': 0, 'Tue' : 0, 'Wed': 0, 'Thu': 0,
'Fri': 0, 'Sat': 0, 'Sun': 0}
• Burada her gun ismi ile bir sayaç tanımladık ve bu
sayaçların hepsini 0’ladık.
• Çünkü henüz saymaya başlamadık
07.11.2015
Sabancı Üniversitesi Lise Yaz Okulu
15
Kod
def MaxTweetGunu(liste):
gun_sayaci = {'Mon': 0, 'Tue' : 0, 'Wed': 0, 'Thu': 0, 'Fri': 0, 'Sat': 0,
'Sun': 0}
for satir in liste:
satir = satir.split()
gun = satir[-7]
gun_sayaci[gun] += 1
max_tweet_gunu = max(gun_sayaci)
return max_tweet_gunu + " "+ str(gun_sayaci[max_tweet_gunu])
07.11.2015
Sabancı Üniversitesi Lise Yaz Okulu
16
Nasıl Yaptık?
• Öncelikle bir gün sayacı oluşturup her birinin değerini
0’a eşitliyoruz.
def MaxTweetGunu(liste):
gun_sayaci = {'Mon': 0, 'Tue' : 0, 'Wed': 0, 'Thu': 0, 'Fri': 0,
'Sat': 0, 'Sun': 0}
07.11.2015
Sabancı Üniversitesi Lise Yaz Okulu
17
Nasıl Yaptık?
• Sonra da önceki problemlerde olduğu gibi twitter
verisinin her bir satırını parçalara/kelimelere
ayırıyoruz.
• Bilindiği gibi sondan 7. element o tweet’in atıldığı
gün oluyor.
– O günü sözlükte bulup sayaç değerine 1 ekliyoruz.
for satir in liste:
satir = satir.split()
gun = satir[-7]
gun_sayaci[gun] += 1
07.11.2015
Sabancı Üniversitesi Lise Yaz Okulu
18
Nasıl Yaptık?
• max_tweet_gunu isimli değişkene en çok tweet
atılan günü koyuyoruz.
• Oradaki ‘max()’ fonksiyonu sözlüğü aratıp en büyük
değere sahip anahtarı geri döndürüyor.
for satir in liste:
satir = satir.split()
gun = satir[-7]
gun_sayaci[gun] += 1
max_tweet_gunu = max(gun_sayaci)
07.11.2015
Sabancı Üniversitesi Lise Yaz Okulu
19
Nasıl Yaptık?
• Sonunda da maksimum günü ve o günde kaç tane
tweet atıldığını geri dönüyoruz.
• Sayaç değerini string veri tipine dönüştürmemiz
gerekiyor
– Return değerini string yapmak istiyoruz çünkü
for satir in liste:
satir = satir.split()
gun = satir[-7]
gun_sayaci[gun] += 1
max_tweet_gunu = max(gun_sayaci)
return max_tweet_gunu + " "+ str(gun_sayaci[max_tweet_gunu])
07.11.2015
Sabancı Üniversitesi Lise Yaz Okulu
20
En Çok Tweet Atılan Saat Aralığı
• Öncelikle tweet dosyasını inceliyoruz
d_cuneyt
Turkcell Sun Jul 06 22:32:33 EET 2014 1
ozdemirmustafaa @Turkcell Turkcell T50yi üretiyor...
Fri Jul 11 16:09:42 EET 2014
55
areuslnbthn tesekkurler @Turkcell
00:50:18 EET 2014
260
07.11.2015
Sabancı Üniversitesi Lise Yaz Okulu
Tue Jul 01
21
Saat Bilgisi Nerede?
• Görüldüğü gibi her tweette sondan 4. element o
tweet’in atıldığı saattir.
• Yine sözlük kullanılarak bu problem çözülebilir.
• Günümüzü altı saatlik aralıklara bölelim (kolaylık
olsun diye)
–
–
–
–
0  00:00-06:00
6  06:00-12:00
12  12:00-18:00
18  18:00-00:00
saat_sayaci = {0:0, 6:0, 12:0, 18:0}
07.11.2015
Sabancı Üniversitesi Lise Yaz Okulu
22
Zaman Aralığı Sayacı
def MaxTweetSaati(liste):
saat_sayaci = {0:0, 6:0, 12:0, 18:0}
for satir in liste:
satir = satir.split()
saat = satir[-4]
saat = int(saat[0:2])
if saat >= 18:
saat = 18
elif saat >=12:
saat = 12
elif saat >= 6:
saat = 6
else:
saat = 0
saat_sayaci[saat] += 1
max_tweet_saati = max(saat_sayaci)
return str(max_tweet_saati) + " " + str(saat_sayaci[max_tweet_saati])
07.11.2015
Sabancı Üniversitesi Lise Yaz Okulu
23
Nasıl Yaptık?
• Sondan 4. element tweet’in atıldığı zaman oluyor.
• Dakikaları ve saniyeleri istemediğimizden 0.
karakterden 2. karaktere kadar alıyoruz, yani sadece
saati.
for satir in liste:
satir = satir.split()
saat = satir[-4]
saat = int(saat[0:2])
…
07.11.2015
Sabancı Üniversitesi Lise Yaz Okulu
24
Nasıl Yaptık?
• if-elif-else ifadelerini kullanarak saat sayacını uygun
bir şekilde arttırdık
for satir in liste:
…
if saat >= 18:
saat = 18
elif saat >=12:
saat = 12
elif saat >= 6:
saat = 6
else:
saat = 0
saat_sayaci[saat] += 1
…
07.11.2015
Sabancı Üniversitesi Lise Yaz Okulu
25
Nasıl Yaptık?
• Saat sayaçlarındaki maksimum değeri bulduk
• Maksimum tweet’in atıldığı aralığı ve o saat
aralığında kaç tweet atıldığını bulup fonksiyondan
geri döndürdük
for satir in liste:
…
max_tweet_saati = max(saat_sayaci)
return str(max_tweet_saati) + " " + str(saat_sayaci[max_tweet_saati])
07.11.2015
Sabancı Üniversitesi Lise Yaz Okulu
26