Bilgisayar Programlamasına ve Veri Analizine Giriş - VIII Hüsnü Yenigün Sabancı Üniversitesi Lise Yaz Okulu 2015
Sabancı Üniversitesi Lise Yaz Okulu Modül 8 için Planımız Gerçek TWEET verilerini inceleyeceğiz 28.11.2018 Sabancı Üniversitesi Lise Yaz Okulu
Hatırlatma: Liste Değişkeni Birden fazla değeri tek bir değişkende tutabiliriz. Bu değişken tipine list adı verilir. Değerler arasında "," karakteri vardır, bir de [] kullanırız Örnek: liste1 = [0,2,3,4,5] liste2 = ['a', 'b', 'c', 'd'] liste3 = ["fizik", "kimya", "biyoloji", "tarih", "cografya", "turkce"] Listelerin elemanlarına sıra numaralarını kullanarak erişebiliriz print liste1[1], liste2[0], liste3[-4] 2 a biyoloji 28.11.2018 Sabancı Üniversitesi Lise Yaz Okulu
Hatırlatma: Liste Değişkeni Örnek: liste3 = ["fizik", "kimya", "biyoloji", "tarih", "cografya", "turkce"] for ders in liste3: print ders >>> fizik kimya biyoloji tarih Cografya turkce 28.11.2018 Sabancı Üniversitesi Lise Yaz Okulu
Hatırlatma: Liste Değişkeni split() fonksiyonu bir cümleyi bırakılan boşluklara göre parçalara ayırıp bir liste oluşturur. Örnek cumle = "Akilli adam aklini kullanir daha akilli adam baskalarinin da aklini kullanir " listem = cumle.split() print listem >>> ['Akilli', 'adam', 'aklini', 'kullanir', 'daha', 'akilli', 'adam', 'baskalarinin', 'da', 'aklini', 'kullanir'] 28.11.2018 Sabancı Üniversitesi Lise Yaz Okulu
Hatırlatma: Dictionary Veri Tipi Listelere çok benzerler ama her değere belli bir ‘key’, yani anahtar atanır. Bu sözlüklerin içinde değer aramayı çok kolaylaştırır. Örnek: gunler = {'Pazartesi': 1, 'Sali':2, 'Carsamba':3, 'Persembe':4, 'Cuma':5, 'Cumartesi': 6, 'Pazar':7} print gunler['Pazartesi'] print gunler['Cumartesi'] maks = max(gunler, key=gunler.get) print maks gunler[maks] >>> 5 Pazar 7 28.11.2018 Sabancı Üniversitesi Lise Yaz Okulu
readlines() fonksiyonu Açılan dosyaların satırlarını bir listeye ekler Örnek: dosya1 = open("arkadaslar.txt", "r") listem = dosya1.readlines() print listem Erkay Savas 01.05.1891 Istanbul Mazhar Alanson 05.06.1950 Trabzon Barrack Obama 04.08.1960 Hawai Angela Merkel 01.02.1770 Almanya >>> ['Erkay Savas 01.05.1891 Istanbul\n', 'Mazhar Alanson 05.06.1950 Trabzon\n', 'Barrack Obama 04.08.1960 Hawai\n', 'Angela Merkel 01.02.1770 Almanya'] 28.11.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu 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 1657 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 3378 GkcAyhan Turkcell beni sesimden tanir he he tanir emin ol ? @Turkcell Wed Jul 09 13:53:02 EET 2014 174 basakbasak78 RT @emaybo: @Turkcell çözüm bulmayan bir firmadan hizmet almak!!! #turkcell Thu Jul 17 22:45:40 EET 2014 73 son_er_ak RT @zuhalbalkas_: @TurkcellHizmet Turkcell müsteri hizmetleri nerede ??? Turkcell e yakismiyor!! Tue Jul 22 10:02:26 EET 2014 758 anti_hashasi RT @zuhalbalkas_: @TurkcellHizmet Turkcell müsteri hizmetleri nerede ??? Turkcell e yakismiyor!! Tue Jul 22 10:02:27 EET 2014 1105 28.11.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu Toplam Tweet Sayısı Bize verilen data dosyasında satır başına bir tweet geldiği söyleniyor. 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() turkcell_tweet.close() toplam_tweet_sayisi = toplamTweet(tweet_listesi) print toplam_tweet_sayisi 28.11.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu Nasıl Yaptık? Öncelikle tweet veri (turkcell.txt) dosyasını açtık ‘tweet_listesi’ isimli bir değişkende (string listesi) 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() turkcell_tweet.close() toplam_tweet_sayisi = toplamTweet(tweet_listesi) print toplam_tweet_sayisi 28.11.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu 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ırdedici ö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 28.11.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu 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 28.11.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu 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. 28.11.2018 Sabancı Üniversitesi Lise Yaz Okulu
O Zaman Kodumuzu Yazalım def toplamReTweet(liste): sayi = 0 for tweet in liste: satir = tweet.split() if satir[1] == 'RT' and satir[2][0] =='@': sayi += 1 return sayi toplam_retweet_sayisi = toplamReTweet(tweet_listesi) print toplam_retweet_sayisi 28.11.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu 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 tweet in liste: satir = tweet.split() if satir[1] == 'RT' and satir[2][0] =='@': sayi += 1 return sayi 28.11.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu 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 tweet in liste: satir = tweet.split() if satir[1] == 'RT' and satir[2][0] =='@': sayi += 1 return sayi 28.11.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu 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üyoruz. def toplamReTweet(liste): sayi = 0 for tweet in liste: satir = tweet.split() if satir[1] == 'RT' and satir[2][0] =='@': sayi += 1 return sayi 28.11.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu 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 28.11.2018 Sabancı Üniversitesi Lise Yaz Okulu
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. 28.11.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu 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 28.11.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu Kod def MaxTweetGunu(liste): gun_sayaci = {'Mon': 0, 'Tue' : 0, 'Wed': 0, 'Thu': 0, 'Fri': 0, 'Sat': 0, 'Sun': 0} for tweet in liste: satir = tweet.split() gun = satir[-7] gun_sayaci[gun] += 1 max_tweet_gunu = max(gun_sayaci, key=gun_sayaci.get) return max_tweet_gunu + " "+ str(gun_sayaci[max_tweet_gunu]) 28.11.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu 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} 28.11.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu 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 tweet in liste: satir = tweet.split() gun = satir[-7] gun_sayaci[gun] += 1 28.11.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu 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 tweet in liste: satir = tweet.split() gun = satir[-7] gun_sayaci[gun] += 1 max_tweet_gunu = max(gun_sayaci, key=gun_sayaci.get) 28.11.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu 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 tweet in liste: satir = tweet.split() gun = satir[-7] gun_sayaci[gun] += 1 max_tweet_gunu = max(gun_sayaci, key=gun_sayaci.get) return max_tweet_gunu + " "+ str(gun_sayaci[max_tweet_gunu]) 28.11.2018 Sabancı Üniversitesi Lise Yaz Okulu
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 Tue Jul 01 00:50:18 EET 2014 260 28.11.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu 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} 28.11.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu Zaman Aralığı Sayacı def MaxTweetSaati(liste): saat_sayaci = {0:0, 6:0, 12:0, 18:0} for tweet in liste: satir = tweet.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, key=saat_sayaci.get) return str(max_tweet_saati) + " " + str(saat_sayaci[max_tweet_saati]) 28.11.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu 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 tweet in liste: satir = tweet.split() saat = satir[-4] saat = int(saat[0:2]) … 28.11.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu 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 28.11.2018 Sabancı Üniversitesi Lise Yaz Okulu
Sabancı Üniversitesi Lise Yaz Okulu 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 tweet in liste: … max_tweet_saati = max(saat_sayaci, key=saat_sayaci.get) return str(max_tweet_saati) + " " + str(saat_sayaci[max_tweet_saati]) 28.11.2018 Sabancı Üniversitesi Lise Yaz Okulu