NBA tarihindeki en zayıf takım hangisi? Python + SQL ile cevabı bulduk

Lei Feng.com: Daha önce, NBA tarihindeki en güçlü takımı analiz eden bir makale yayınlamıştık. Ayrıntılar için bkz. "Son dört yılın oyun verilerini Python ile analiz etmek. En güçlü NBA takımı ortaya çıktı". Bu sefer biz Bakalım en zayıfı hangisi? Orijinal yazar Kaiser, Jinglue Jizhi'nin genel müdürü Jizhi Ağ Sütunu Leifeng.com yetkilendirildi.

Makaledeki kodun bir kısmında, okuyucuların çevrimiçi olarak tamamlamaları ve değerlendirmeleri için bırakılan "kod tamamlama" kelimelerinin bulunduğu bir yorum olacaktır. Bu, küçük bir ev ödevine eşdeğerdir. Lütfen burada kendiniz yapın. (Editörün notu: tamamlanması gereken her bölüm için hızlı bilgi verilir)

01. elo değeri

Elo değeri, mevcut rekabetçi çevrimiçi oyunlarda merdiven sistemi gibidir.Ekip, her maçtan sonra performansa göre ayarlanır.Kazançlar artar ve kayıplar azalır, küçük kazançlar biraz artar ve büyük kazançlar büyük ölçüde artar. Elo değeri, bir takımın normal sezondaki beklentisini yansıtıyor. 1800'e karşılık gelen beklenti, hanedan düzeyinde bir takım olan 67'den fazla maç kazanmak. Belirli merdiven bölümleri şu şekilde dağıtılır:

ELO değeri eşleştirme kaydı karşılık gelen takım açıklaması

180067-15 epik seviye

170060-22 şampiyonluk yarışmacısı

160051-31 playoff seviyesi

150041-41 ortalama

140031-51 Loto seviyeleri

130022-60 suskun

120015-67 berbat

Tarihin en yüksek rekoru, bir zamanlar 1850 puanı aşan 1996 finallerindeki Bulls'tur.

Ünlü veri analizi web sitesi 538 (fivethirtyeight.com), 60.000'den fazla veri parçasıyla geçmiş NBA takviminin (2015 sezonuna) elo değeri kaydını sağlar. Veri miktarının büyük olduğu düşünülemez, ancak onu yerel olarak doğrudan Excel ile açarsanız, deneyimin hala oldukça acı verici olduğu tahmin edilmektedir. İşte nasıl kullanılacağı. Python + SQL Bununla başa çıkmak, Excel'de çalışan arkadaşların çoğuna yardımcı olabilir.

02. Tuples

Tuple, Python'da yaygın olarak kullanılan başka bir veri türüdür.Bir listeye çok benzer.Her ikisi de birkaç öğe içerebilir ve öğelerin çağrılması köşeli parantezler + dizin biçimindedir.

sample_list =

sample_tuple = (0,1,2,3)

# Listenin ilk öğesi

sample_list

# Demetin ikinci öğesi

sample_tuple

Ana farklar şunlardır:

Başlıklar köşeli parantezlerle tanımlanır ve listeler köşeli parantezlerle tanımlanır

Tuple'lar değiştirilemez

Tek bir öğe olsa bile, bir virgül gereklidir, örneğin (madde 1,) . Bu virgül eksikse, bir demet değil, yine de öğenin kendisini elde edersiniz.

Tuplelar sadece tanımlandıklarında atanabilir, zorla değiştirilirlerse, yorumlayıcı tarafından bir hata istenecektir.

TypeError:

"tuple" nesnesi, öğe atamasını desteklemiyor

Bazı işlevlerin dönüş değeri sayısal bir değer veya karakter değildir, ancak birden çok çıktıya sahiptir ve ardından tuple biçiminde bulunur. Örneğin, aşağıdaki örnek iki giriş parametresinin toplamını ve ürününü döndürür, Çalıştırmak Kontrol edin, iki çıkış içeride.

def sum_times (x, y):

return (x + y), (x * y) sum_times (2,3)

03. Veritabanı

Önceki eğitimlerde, hem programda oluşturulan hem de metin dosyalarında depolanan bazı veri kümelerine maruz kaldık. Daha büyük veri kümeleri genellikle dosyalarda saklanır ve program çalışırken belleğe okunur.

Bununla birlikte, dosya depolama verileri (.txt veya .csv) hala büyük sorunlarla karşı karşıyadır. Birincisi, veri miktarı bilgisayar belleğinden daha büyük olduğunda, ağır bir hesaplama yükü getirecek ve hatta çalıştırılamayacaktır; ikincisi, veriler yüksek frekanslı olabilir Değişiklikler, örneğin, e-ticaret şirketleri, Double 11'in en yoğun olduğu dönemde saniyede on binlerce işlem gerçekleştirir ve sıradan dosya formatları açıkça bunları kaldıramaz.

Böylece veritabanı (veritabanı) ortaya çıktı. Veritabanı ilk Yapılandırılmış Verileri daha esnek bir şekilde işlemek için veri saklama yöntemi, program artık tüm verileri tek seferde belleğe değil, belirli ihtiyaçlara göre okur Sorgu İlgili veri setini elde etmek için. Bu görevler için programlama diline SQL (Yapılandırılmış Sorgu Dili) , Bilgisayarda biraz sağduyu sahibi arkadaşlar bu kısaltmaya aşina olmalıdır.

Tanınmış ilişkisel veritabanı yönetim sistemleri arasında MySQL, Oracle vb. Yer alır.

04. SQLite

SQL, veritabanlarını sorgulamak ve çalıştırmak için özel olarak tasarlanmış bir dildir, bu nedenle işlevler açısından zengin değildir ve Python ve JavaScript gibi diller kadar çeşitli değildir.

Bir veritabanı birkaç taneden oluşur Tablo Kompozisyon, tıpkı her Excel dosyasında birden çok E-Tablo olduğu gibi. Her tablo şunları içerir Kürek çekmek karşı Sütun , Bunu anlamak daha kolay. Bir satır bir örneği temsil eder ve birden çok sütun her boyuttaki öznitelikleri tanımlar.

SQLite Çok düşük kaynak kullanımı ve hızlı işlem hızına sahip hafif bir veritabanı yönetim sistemidir.Sürüm 3'e güncellendi. Python, SQLite ifadelerini işlemeye ayrılmış bir kitaplığa sahiptir sqlite3 .

ithal sqlite3

Aşağıda, SQL'in temel kurallarını ve uygulama yöntemlerini anlamak için bir örnek olarak geçmiş NBA zamanlama verilerinden bir parça alacağız. (Veri kaynağı: FiveThirtyEight)

05. Soruşturma

Veritabanıyla en temel iletişim biçimi, koşulları karşılayan bir veri alt kümesini döndüren sorgudur.Temel anahtar sözcük SELECT ve ardından seçilen sütunun başlığıdır. Daha önce belirtildiği gibi, bir veritabanında birden çok tablo olabilir, bu nedenle sorgu ifadesi kaynak tabloyu belirtmelidir ve anahtar sözcük FROM'dur.

SEÇİN sütun1, sütun2, ... tablodan;

SQL'in cümlenin sonunda Python'un alışkanlıklarından çok farklı olan ve C ++ tarafından yönetilme korkusunu uyandıran bir noktalı virgül (;) gerektirdiğini unutmayın.

NBA veritabanı, adında yalnızca bir tablo içerir çarşaf Sayfayı sorgulamak istediğimizi varsayalım team_id Sütun, ardından karşılık gelen SQL:

Nba_history'den team_id'i SEÇİN;

Veritabanı çok büyükse, yalnızca belirli sütunları sorgulasanız bile, bu küçük bir hesaplama miktarı değildir. Burada yeni anahtar sözcükler tanıtabilirsiniz. SINIR , Sorgulamak istediğiniz satır sayısı ile devam edin. Sadece cepheyi istemek gibi 5 tamam team_id Sütun, ardından SQL:

Nba_history LİMİT 5'DEN team_id'i SEÇİN;

Aşağıdaki örnek, iki sütun elo_n ve win_equiv'in ilk 5 satırını sorgulamak için Python aracılığıyla SQLite'ı çağıracaktır:

ithal sqlite3

conn = sqlite3.connect ('/ mnt / vol0 / Py_Intro / 05_tuple_database / nbaallelo.db')

cur = bağlaç

# Kod tamamlama

sorgu =

# Kod tamamlama

cur.execute (sorgu)

elos = cur.fetchall

connect.close

baskı (elos)

Tamamlama ipuçları: Örneği hatırlayın, anahtar sözcükler arasındaki adları değiştirin ve karakter türünü değişken sorguya atayın

Sorgu ifadesinin eleman olarak tuplelar içeren bir liste döndürdüğü görülebilir. Yukarıdaki örneğin çıktısı 5 (elo_n, win_equiv) listesidir ve şöyle olmalıdır:

06. Python ile SQLite

Bölüm 04'ün son örneğinde SQL deyimlerine ek olarak birçok Python komutu vardır.Bunlar Python'un SQLite olarak adlandırdığı ifadelerdir.

Bağlantı nesnesi

Birincisi veritabanı ile bağlantı kurmak, sqlite3.connect Dönecek Bağ Örnek nesnesi ve farklı kaydet bağlantı Şu anda değişken bağlantı Karşılık gelen tüm veritabanıdır.

ithal sqlite3

conn = sqlite3.connect ("/ mnt / vol0 / Py_Intro / 05_tuple_database / nbaallelo.db")

İmleç nesnesi

Bağ Nesnesi .cursor Bir imleç nesnesi (imleç nesnesi) oluşturabilirsiniz. İmleç nesnesi, veri tabanında SQL deyimlerini yürütebilir ve daha esnek veri işlemleri gerçekleştirebilir.

Wang Mang'ın imleci

sorgu Saf bir SQL ifadesidir, geçti cur.execute Gerçek yürütmede, veritabanı sorgusunun sonucu hala cur nesnesindedir. Son çağrı cur.fetchall Tüm sorgu sonuçlarını döndürün ve bunları değişkenlere kaydedin elos , Tupleların son listesidir.

Yalnızca bir sorgu sonucu döndürmek istiyorsanız, kullanabilirsiniz cur.fetchone .

Python ve SQLite3'ün ortak uygulaması ileride derinlemesine anlatılacaktır.Bu makale yine de SQL ifadelerine odaklanacaktır.

07. Nerede

Veritabanındaki belirli bir tablodan yalnızca belirli bir sütunun ilk birkaç satırını sorgulamak çok kısıtlayıcıdır ve uygulama gereksinimlerini karşılamak zordur. Aslında, ilgilendiğimiz veri alt kümesi her zaman sırayla düzenlenmez, ancak belirli kısıtlamaları karşılar.

Kesin sorgunun kapsamını daha da azaltmak için, WHERE anahtar sözcüğünü kullanabilirsiniz. Örneğin, NBA tarihinde elo_n değeri 1850'den yüksek olan güçlü takımların kimliğini sorgulamak istersek, SQL ifadesi şu şekildedir:

ELO_n NEREDE sayfasından takım_kimliği, elo_n seçin > 1850

Sorgu sonuçları, tarihteki elo değeri 1850'yi geçen tek takımın 1996 Finalleri sırasında Chicago Bulls olduğunu gösteriyor.

Lütfen aşağıdan bilgi alın elo_n Altında 1100 Zayıf takımın kimliği ve ilgili maç tarihi. Sqlite3 kütüphanesi, bağlantı nesneleri ve imleç nesneleri önceden tanımlanmıştır.SQL sorgu deyimi sorgusunu tanımlayarak başlayabilirsiniz.

# Kod tamamlama

sorgu =

# Kod tamamlama

cur.execute (sorgu)

elo_1100 = cur.fetchall

connect.close

baskı (elo_1100)

Tamamlama ipuçları: Lütfen "fran_id", "date_game", "elo_n" sırasıyla sorgulayın.

Sorgu ve taramanın sonuçları, tarihte 1100'ün altına düşen tek zayıfların 1968'de sadece "Squires" adlı bir takım olduğunu gösteriyor.

O kadar zayıflar ki, kötü isimden ayrılamaz diye düşünüyorum. "Efendi", İngilizce'de "hizmetçi" anlamına gelir. Hearthstone'da 11 Squire gibi "Squire" adında birçok hizmetçi vardır:

Leifeng.com (genel hesap: Leifeng.com) ile ilgili okuma:

Geçtiğimiz dört yılın oyun verilerini analiz etmek için Python'u kullanan en güçlü NBA takımının bu olduğu ortaya çıktı.

Zen ve göğüs maskesi tanıma sanatı (bölüm 1)

MIX3 basın toplantısından sonra, kayan tam ekran patentli bir kelime savaşını tetikledi. Lenovo: Xiaomi'den 500 gün önce
önceki
Neden Kung Fu oyuncuları arasından çıkan Wu Jing?
Sonraki
Valkyrie Battlefield'ın 10. yıl dönümü, en sevdiğiniz savaş tanrıçası hangisi?
Tsinghua Üniversitesi Astronomi Bölümü'nü kurdu! Netizenler şişti ...
Halk için NPC temsilcileri, Yubei Baosheng Gölü pratik şeyler yapıyor
Bahse girmeye cesaret edin, yılın en iyi Çin gerilim filmi
2018 yıl sonu ödül anketi raporu: Katılımcıların% 60'ından fazlası 10.000 yuan'ın altındaydı
National Bank "Minecraft" Xbox One S sınırlı konsolu resmi olarak piyasaya sürüldü
Oyun oynamak, yeşil bitkilere liderlik etmek ... kadınların gönüllülük hizmeti Yuzui Kasabasına "yeşil hayat" getiriyor
Double Eleven Chop El Baskıncıları Bosch Vita Fresh Power Buzdolabı "Taze" Yakalandı
Gece Okuması Tong Liya, kaçış rutinleri hayranları için havaalanında kuşatıldı Kayınvalidesine, işini bırakıp çocukları eve götürmesini söyledi
Askeri geçit töreni: 90 yerli aktör incelemenizi bekliyor!
Shanguo'nun 1 Mayıs Özel Saldırıları "Dark Souls 3", "Fallout 4" ve yeni tarihin diğer şaheserleri
Küresel akıllı telefon pazarı düşüyor, ancak Huawei mevcut duruma karşı Apple'ı tamamen geride bırakıyor
To Top