Saya telah mengurai lebih dari 1000 profil Github pembelajaran mesin teratas dan inilah yang saya pelajari.





Saat menelusuri kata kunci "pembelajaran mesin", saya menemukan 246.632 repositori pembelajaran mesin. Karena mereka semua terkait dengan industri ini, saya berharap pemiliknya menjadi ahli atau setidaknya cukup kompeten dalam pembelajaran mesin. Oleh karena itu, saya memutuskan untuk menganalisis profil pengguna ini dan menampilkan hasil analisisnya.



Bagaimana saya bekerja



Alat



Saya menggunakan tiga alat pengikis:



  • Beautiful Soup untuk mengambil URL dari semua repositori yang diberi tag dengan pembelajaran mesin. Ini adalah pustaka Python yang membuat pengikisan lebih mudah.
  • PyGithub . Python- Github API v3. Github- (, , ..) Python-.
  • Requests .


Metode yang



saya parse jauh dari semua, tetapi hanya pemilik dan 30 kontributor paling aktif dari 90 repositori teratas yang muncul di hasil pencarian.











Setelah menghapus duplikat dan profil organisasi seperti udacity, saya mendapat daftar 1208 pengguna. Untuk masing-masing, saya mengurai informasi untuk 20 parameter kunci.



new_profile.info ()







13 parameter pertama diperoleh dari sini.







Sisanya saya ambil dari repositori pengguna:



  • total_stars total bintang dari semua repositori
  • max_star jumlah maksimum bintang dari semua repositori
  • jumlah total garpu dari semua repositori
  • deskripsi deskripsi dari semua repositori pengguna dari semua repo
  • jumlah kontribusi kontribusi selama setahun terakhir






Memvisualisasikan data



Histogram



Setelah membersihkan data, tibalah giliran tahap yang paling menarik: visualisasi data. Saya menggunakan Plotly untuk ini.



import matplotlib.pyplot as plt
import numpy as np
import plotly.express as px # for plotting
import altair as alt # for plotting
import datapane as dp # for creating a report for your findings
 
top_followers = new_profile.sort_values(by='followers', axis=0, ascending=False)
 
fig = px.bar(top_followers,
             x='user_name',
             y='followers',
             hover_data=['followers'],
            )
fig.show()
      
      





Inilah yang terjadi .



Histogramnya agak canggung karena memiliki ekor pengguna yang sangat panjang dengan pengikut kurang dari 100. Jadi lebih baik untuk memperbesarnya.







Seperti yang kamu lihat, llSourcell (Siraj Raval) memiliki pengikut terbanyak (36261). Yang terpopuler kedua memiliki pengikut tiga kali lebih sedikit (12682).



Kami dapat melanjutkan dan mengetahui bahwa 1% profil mendapatkan 41% dari semua pengikut!



>>> top_n = int(len(top_followers) * 0.01)12>>> sum(top_followers.iloc[0: top_n,:].loc[:, 'followers'])/sum(top_followers.followers)0.41293075864408607
      
      





Selanjutnya, kami memvisualisasikan informasi pada total_stars, max_star, forks menggunakan skala logaritmik.



figs = [] # list to save all the plots and table
 
features = ['followers',
               'following',
               'total_stars',
               'max_star',
               'forks',
                'contribution']
for col in features:
    top_col = new_profile.sort_values(by=col, axis=0, ascending=False)
    
    log_y = False 
    #change scale of y-axis of every feature to log except contribution
    if col != 'contribution':
        log_y = True
        
    fig = px.bar(top_col,
             x='user_name',
             y=col,
             hover_data=[col],
             log_y = log_y
            )
    
    fig.update_layout({'plot_bgcolor': 'rgba(36, 83, 97, 0.06)'}) #change background coor
    
    fig.show()
    
    figs.append(dp.Plot(fig))
      
      





Ternyata seperti ini .



Gambar yang dihasilkan sangat dekat dengan distribusi menurut hukum Zipf. Kita berbicara tentang pola empiris distribusi frekuensi kata-kata dalam bahasa alami: jika semua kata dalam bahasa diurutkan dalam urutan frekuensi penggunaannya. Kami memiliki ketergantungan serupa di sini.



Korelasi



Tapi bagaimana dengan ketergantungan antara titik data utama? Dan seberapa kuat ketergantungan ini? Saya menggunakan scatter_matrix untuk mencari tahu.



correlation = px.scatter_matrix(new_profile, dimensions=['forks', 'total_stars', 'followers',
                                 'following', 'max_star','contribution'],
                               title='Correlation between datapoints',
                               width=800, height=800)
correlation.show()
 
corr = new_profile.corr()
 
figs.append(dp.Plot(correlation))
figs.append(dp.Table(corr))
corr
      
      





Ternyata begini dan seterusnya .



Hubungan positif terkuat terbentuk antara:



  • Jumlah maksimum bintang dan jumlah bintang (0,939)
  • Garpu dan bintang total (0,929)
  • Jumlah garpu dan jumlah pengikut (0,774)
  • Pengikut dan total bintang (0,632)


Bahasa pemrograman



Untuk mengetahui bahasa pemrograman mana yang paling umum di antara pemilik profil GitHub, saya melakukan beberapa analisis tambahan.



# Collect languages from all repos of al users
languages = []
for language in list(new_profile['languages']):
    try:
        languages += language
    except:
        languages += ['None']
        
# Count the frequency of each language
from collections import Counter
occ = dict(Counter(languages))
 
# Remove languages below count of 10
top_languages = [(language, frequency) for language, frequency in occ.items() if frequency > 10]
top_languages = list(zip(*top_languages))
 
language_df = pd.DataFrame(data = {'languages': top_languages[0],
                           'frequency': top_languages[1]})
 
language_df.sort_values(by='frequency', axis=0, inplace=True, ascending=False)
 
language = px.bar(language_df, y='frequency', x='languages',
      title='Frequency of languages')
 
figs.append(dp.Plot(language))
 
language.show()
      
      





Oleh karena itu, 10 bahasa teratas meliputi:



  • Python
  • JavaScript
  • Html
  • Notebook Jupyter
  • Shell, dll.


Lokasi



Untuk memahami di belahan dunia mana pemilik profil berada, Anda perlu melakukan tugas berikut - untuk memvisualisasikan lokasi pengguna. Di antara profil yang dianalisis, geografi diindikasikan untuk 31%. Untuk visualisasi kami menggunakan geopy.geocoders.Nominatim



from geopy.geocoders import Nominatim
import folium
 
geolocator = Nominatim(user_agent='my_app')
 
locations = list(new_profile['location'])
 
# Extract lats and lons
lats = []
lons = []
exceptions = []
 
for loc in locations:
    try:
        location = geolocator.geocode(loc)
        lats.append(location.latitude)
        lons.append(location.longitude)
        print(location.address)
    except:
        print('exception', loc)
        exceptions.append(loc)
        
print(len(exceptions)) # output: 17
 
 # Remove the locations not found in map
location_df = new_profile[~new_profile.location.isin(exceptions)]
 
location_df['latitude'] = lats
location_df['longitude'] = lons
      
      





Jadi, untuk membuat peta, gunakan scatter_geo dari Plotly



# Visualize with Plotly's scatter_geo
m = px.scatter_geo(location_df, lat='latitude', lon='longitude',
                 color='total_stars', size='forks',
                 hover_data=['user_name','followers'],
                 title='Locations of Top Users')
m.show()
 
figs.append(dp.Plot(m))
      
      





Menurut link ini tersedia peta asli dengan zoom.



Deskripsi repo dan bio pengguna



Banyak pengguna meninggalkan deskripsi untuk repositori mereka dan juga memberikan bio mereka sendiri. Untuk memvisualisasikan semua ini, kami menggunakan W ordCloud! untuk Python.



import string
import nltk
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
from nltk.stem import WordNetLemmatizer
from nltk.tokenize import word_tokenize
from wordcloud import WordCloud, STOPWORDS
import matplotlib.pyplot as plt
 
nltk.download('stopwords')
nltk.download('punkt')
nltk.download('wordnet')
 
      
def process_text(features):
  '''Function to process texts'''
    
    features = [row for row in features if row != None]
    
    text = ' '.join(features)
    
    
    
    # lowercase
    text = text.lower()
 
    #remove punctuation
    text = text.translate(str.maketrans('', '', string.punctuation))
 
    #remove stopwords
    stop_words = set(stopwords.words('english'))
 
    #tokenize
    tokens = word_tokenize(text)
    new_text = [i for i in tokens if not i in stop_words]
    
    new_text = ' '.join(new_text)
    
    return new_text
 
def make_wordcloud(new_text):
  '''Function to make wordcloud'''
    
    wordcloud = WordCloud(width = 800, height = 800,
                background_color ='white',
                min_font_size = 10).generate(new_text)
 
    
    fig = plt.figure(figsize = (8, 8), facecolor = None)
    plt.imshow(wordcloud)
    plt.axis("off")
    plt.tight_layout(pad = 0)
 
    plt.show()
    
    return fig
    
descriptions = []
for desc in new_profile['descriptions']:
    try:
        descriptions += desc
        
    except:
        pass
 
descriptions = process_text(descriptions)
 
cloud = make_wordcloud(descriptions)
 
figs.append(dp.Plot(cloud))
      
      









Begitu pula dengan bio



bios = []
for bio in new_profile['bio']:
    try:
        bios.append(bio)
        
    except:
        pass
      
text = process_text(bios)
 
cloud = make_wordcloud(text)
 
figs.append(dp.Plot(cloud))
      
      









Seperti yang Anda lihat, kata kunci tersebut cukup konsisten dengan apa yang dapat Anda harapkan dari spesialis pembelajaran mesin.



temuan



Data tersebut diterima dari pengguna dan penulis dari 90 repositori dengan kecocokan terbaik untuk kunci "pembelajaran mesin". Namun tidak ada jaminan bahwa semua pemilik profil teratas ada di daftar oleh pakar pembelajaran mesin.



Namun demikian, artikel ini adalah contoh yang baik tentang bagaimana data yang terkumpul dapat dibersihkan dan divisualisasikan. Kemungkinan besar, hasilnya akan mengejutkan Anda. Dan ini tidak aneh, karena ilmu data membantu menerapkan pengetahuan Anda untuk menganalisis lingkungan Anda.



Nah, jika perlu, Anda dapat mem-fork kode artikel ini dan melakukan apa pun yang Anda inginkan, di sini adalah repo </ a.



, Data Science AR- Banuba - Skillbox.



, ยซยป github- . , , ..



:



1) , , . ( , 'contribution'). , .



'contribution' , . .



, , . , , ().



2) , . , . , , . , , - . ( ), - , , .



: , . .




All Articles