<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Pandas ilə SQLvari sorğuların yazılması
SQL ilə heç olmasa qismən tanışlığı olan adam "SQL-in əsasların bir neçə saat ərzində öyrənib ilk sorğuları yazmaq olar" cümləsi ilə razılaşar (hər halda mən bu cür fikirləşirəm). Python ilə də eynən, bu dil ən sadə və proqramlaşdırmanı öyrənməyə başlayanlar üçün ideal dil sayılır.
İndi, verilənlər elmi və məlumat analizi ən trend mövzu olan vaxtda Python-un Pandas modulu vasitəsi ilə SQL kimi məlumat emal etmə məqaləsi elə lap yerinə düşərdi, və budur o!
Jurnalda SQL-da DML (Məlumat Manipulyasiyası Dili) vasitəsi ilə icra olunan məlumatın sorğulanması (SELECT), məlumatın daxil olunması (INSERT), məlumat pozulması (DELETE) və məlumat yeniləməsi (UPDATE) komandalarının Pandas analoqları təqdim olunacaq. Hər iki variantda sorğular icra olunacaq və göstəriləcək.
Başlayaq!
İşə Pandasın importundan başlayırıq
Step1:  Jurnalın daxilində 2 cədvəldən istifadə olunacaq və onlar mənim GitHub repositoriyamda yerləşən dummy_data.xlsx Excel faylının ayrı-ayrı səhifələrinə yerləşir.
* staff - İşçinin "unikal identifikatoru", "adı", "soyadı", "cinsi", "küçə", "şirkət", "vəzifəsi"
* staff_add_info - "unikal identifikatoru", "email ünvanı", "aktivlik statusu", "istifadəçi adı", "MD5-də saxlanan şifrəsi", "mobil_nömrəsi"
Cədvəllərin ortaq identifikatoru - "guid" sütunudur, tutuşdurma baş verdikdə bu sütundan istifadə edəcəyik
İşləyəcəyimiz cədvəllər haqqında ümumi məlumat aldıq, datafreymlərə keçirmək olar
Step2:  Pandas modulu ilə işin nümaişi 2 hissədən ibarət olacaq
Step3:  Ups! Nədənsə (əslində əlbəttə ki Pandasın standart ayarlarına uyğun, perfomans və praktiklik baxımından) məlumat öyrəşdiyimiz SQL sorğulama zamanı kimi tam olaraq yox, hissə-hissə olaraq çıxdı, yəni yalnız ilk 30 və son 30 sətr əks olundu.
Bu məqamı nəzərə alaraq ayarlarda maksimal sətr və sütun sayın dəyişək və limitsiz edək. (Diqqət! Real həyatda böyük həcmli verilənlər ilə iş zamanı bunu etməyin!!!)
Maksimal sütun və sətr sayın None qeyd edib limitləri aradan qaldırırıq.
Step4:  Yenidən yoxlayaq ...
Step5:  Əla. Davam etmək olar.
Növbəti məqsədimiz yalnız tələb olunan sütunları sorğulayıb 3 sətri əks etdirməkdir
SQL versiya
Step6:  İlkin sorğu etməyə öyrəndik, növbə gəldi filterlərin əlavə olunmasına.
SQL versiya
Step7:  Gördüyümüz kimi binar_maska 1 ölçülü datafreym yarandı və realda "Male" dəyəri olan sətrdə "True", digər dəyərlər olan sətrlərdə isə "False" dəyərin saxlayır. İndi isə bu maskanı tətbiq edək və cavabları yoxlayaq
Step8:  Növbəti addım - istifadə olunan filterləri artıraq və zənqinləşdirməkdir. Elə sorğu yazaq ki yalnız cinsi 'Kişi'  VƏ vəzifəsi 'Account Executive' olan VƏ YA adı 'Valentina' olan işçilər siyahısı çıxsın.
SQL versiya
Step9:  UPDATE
SQL-də UPDATE əmri məlumatın dəyişdirilməsi və yenilənməsi üçün istifadə olunur.
SQL versiyası
Step10:  Dəyişiklikləri yoxlayaq. Bunun üçün filtr üzrə yazılmış yazılarda 'gender' sütunun yoxlayaq.
Step11:  2-ci indeksdə 'Valentina' adlı istifadəçi sorğulanan parameterlərə uyğun gəldi və "Female"-dən "Male"-yə dəyişdi.
INSERT
SQL-də INSERT əmri məlumatın əlavə olunması üçün istifadə olunur.
Nümaiş üçün staff_df-də yeni işçi əlavə edək
Step12:  DELETE
SQL-də DELETE əmri məlumatın silinməsi üçün istifadə olunur.
Hər-hansı bir məlumatı datafreymdən silmək istədikdə SQL-a əks məntiqdən istifadə etməliyik. Nümaiş üçün az əvvəl əlavə etdiyimiz "Ömər" və ayrı "Ömər" işçilərin silək.
SQL variantı
<ASSISTANT_TASK:>
Python Code:
import pandas as pd
Explanation: Pandas ilə SQLvari sorğuların yazılması
SQL ilə heç olmasa qismən tanışlığı olan adam "SQL-in əsasların bir neçə saat ərzində öyrənib ilk sorğuları yazmaq olar" cümləsi ilə razılaşar (hər halda mən bu cür fikirləşirəm). Python ilə də eynən, bu dil ən sadə və proqramlaşdırmanı öyrənməyə başlayanlar üçün ideal dil sayılır.
İndi, verilənlər elmi və məlumat analizi ən trend mövzu olan vaxtda Python-un Pandas modulu vasitəsi ilə SQL kimi məlumat emal etmə məqaləsi elə lap yerinə düşərdi, və budur o!
Jurnalda SQL-da DML (Məlumat Manipulyasiyası Dili) vasitəsi ilə icra olunan məlumatın sorğulanması (SELECT), məlumatın daxil olunması (INSERT), məlumat pozulması (DELETE) və məlumat yeniləməsi (UPDATE) komandalarının Pandas analoqları təqdim olunacaq. Hər iki variantda sorğular icra olunacaq və göstəriləcək.
Başlayaq!
İşə Pandasın importundan başlayırıq:
End of explanation
# ilk öncə açacağımız fayla link, sonra isə səhifənin adın qeyd edirik
staff_df = pd.read_excel('https://raw.githubusercontent.com/limpapud/datasets/master/Tutorial_datasets/SQL_Pandas.xlsx',sheet_name='staff') 
staff_add_info = pd.read_excel("https://raw.githubusercontent.com/limpapud/datasets/master/Tutorial_datasets/SQL_Pandas.xlsx",sheet_name='staff_add_info')
staff_df.head(3) # head(3) Məlumatın ilk 3 sətrin əks etdirir
staff_add_info.head(3)
Explanation: Jurnalın daxilində 2 cədvəldən istifadə olunacaq və onlar mənim GitHub repositoriyamda yerləşən dummy_data.xlsx Excel faylının ayrı-ayrı səhifələrinə yerləşir.
* staff - İşçinin "unikal identifikatoru", "adı", "soyadı", "cinsi", "küçə", "şirkət", "vəzifəsi"
* staff_add_info - "unikal identifikatoru", "email ünvanı", "aktivlik statusu", "istifadəçi adı", "MD5-də saxlanan şifrəsi", "mobil_nömrəsi"
Cədvəllərin ortaq identifikatoru - "guid" sütunudur, tutuşdurma baş verdikdə bu sütundan istifadə edəcəyik
İşləyəcəyimiz cədvəllər haqqında ümumi məlumat aldıq, datafreymlərə keçirmək olar:
Hər sütuna uyğun eyni adlı datafreymlər yaratmaqdan başlayırıq. Bunun üçün pd.read_excel funksiyası vasitəsi ilə excel faylın müxtəlif səhifələrin "oxuyub" yaradırıq.
End of explanation
staff_df
Explanation: Pandas modulu ilə işin nümaişi 2 hissədən ibarət olacaq:
1. Real SQL əmr sorğusunun yazılması və icrası
2. Yazılmış sorğunun analoqunun datafreymlər üzərində Pandas vasitəsi ilə hazırlanması
SELECT
SQL-də SELECT əmri məlumatın sorğulanması və əldə edilməsi üçün istifadə olunur.
Deyək ki biz staff_db cədvəlindən bütün sütun və sətrləri əldə etmək istəyirik. Bunun üçün yazılmış SQL sorğusu aşağıdaki kimidir:
Pandas vasitəsi ilə bu komandanı sadəcə datafreymin adın yazmaq ilə icra edə bilərsiniz.
End of explanation
pd.set_option('display.max_columns',7) # sütün sayı üzərindən limit qaldıran əmr
pd.set_option('display.max_rows',60) # sətr sayı üzərindən limit qaldıran əmr
Explanation: Ups! Nədənsə (əslində əlbəttə ki Pandasın standart ayarlarına uyğun, perfomans və praktiklik baxımından) məlumat öyrəşdiyimiz SQL sorğulama zamanı kimi tam olaraq yox, hissə-hissə olaraq çıxdı, yəni yalnız ilk 30 və son 30 sətr əks olundu.
Bu məqamı nəzərə alaraq ayarlarda maksimal sətr və sütun sayın dəyişək və limitsiz edək. (Diqqət! Real həyatda böyük həcmli verilənlər ilə iş zamanı bunu etməyin!!!)
Maksimal sütun və sətr sayın None qeyd edib limitləri aradan qaldırırıq.
End of explanation
staff_df
Explanation: Yenidən yoxlayaq ...
End of explanation
staff_df[['first_name','last_name','gender','job_title']].head(3)
Explanation: Əla. Davam etmək olar.
Növbəti məqsədimiz yalnız tələb olunan sütunları sorğulayıb 3 sətri əks etdirməkdir
SQL versiya: 
Pandas versiyasında sorğunun məntiqi datafreym adından sonra tələb olunan sütun adların siyahı vasitəsi ilə təmin edərək .head() funksiyası köməkliyi ilə ilk 3 yazını əks etdirməkdir.
End of explanation
binar_maska = staff_df['gender']=='Male'
binar_maska.head(5)
Explanation: İlkin sorğu etməyə öyrəndik, növbə gəldi filterlərin əlavə olunmasına.
SQL versiya:
Pandas-da datafreym daxili filter əlavə etmək üçün binar "maska"-dan istifadə etməliyik. Amma nədir binar maska? O filterlənən sütun üzrə keçərək sütundakı hər bir sətr üzrə dəyərin tələb olunan dəyərə bərabər olub olmadığını yoxlayıb müvafiq olaraq True/False (Doğru\Yalnız) dəyəri verir. Sonra isə bu maska üzrə sütun üzrə əks olunan dəyərləri filterləmək mümkün olur.
Məsəl üçün Kişi cinsi üzrə maska yaradaq və əks etdirək:
End of explanation
staff_df[['first_name','last_name','gender','job_title']][staff_df['gender']=='Male'].head(3)
Explanation: Gördüyümüz kimi binar_maska 1 ölçülü datafreym yarandı və realda "Male" dəyəri olan sətrdə "True", digər dəyərlər olan sətrlərdə isə "False" dəyərin saxlayır. İndi isə bu maskanı tətbiq edək və cavabları yoxlayaq:
End of explanation
staff_df[['first_name','last_name','gender','job_title']][((staff_df['gender']=='Male') & (staff_df['job_title']=='Account Executive')) | (staff_df['first_name']=='Valentina')].head(3)
Explanation: Növbəti addım - istifadə olunan filterləri artıraq və zənqinləşdirməkdir. Elə sorğu yazaq ki yalnız cinsi 'Kişi'  VƏ vəzifəsi 'Account Executive' olan VƏ YA adı 'Valentina' olan işçilər siyahısı çıxsın.
SQL versiya:
Pandas-da VƏ məntiqi ampersand ("&") vasitəsi ilə, VƏ YA məntiqi isə vertikal xətt ("|") vasitəsi ilə tənzimlənir.
End of explanation
staff_df.loc[((staff_df['gender']=='Male') & (staff_df['job_title']=='Account Executive')) | (staff_df['first_name']=='Valentina'),'gender']='Male'
staff_df.head(3)
Explanation: UPDATE
SQL-də UPDATE əmri məlumatın dəyişdirilməsi və yenilənməsi üçün istifadə olunur.
SQL versiyası: 
Pandas ilə sətrləri yeniləmək üçün index ilə işləmək üçün .loc və yenə binar maskalardan istifadə edəcəyik.
Məntiq aşağıdaki kimidir: DataFreym_adı.loc[binar maska, dəyişməli sütun] = 'hədəf dəyər'
End of explanation
staff_df[['first_name','last_name','gender','job_title']][((staff_df['gender']=='Male') & (staff_df['job_title']=='Account Executive')) | (staff_df['first_name']=='Valentina')].head(3)
Explanation: Dəyişiklikləri yoxlayaq. Bunun üçün filtr üzrə yazılmış yazılarda 'gender' sütunun yoxlayaq.
End of explanation
len(staff_df)
staff_df.loc[len(staff_df)] = ['6a9472d4-4949-4f98-8543-c6878d558422','Omar','Bayramov','Male','NaN','Limpapud','NaN']
staff_df.tail(3) # son yazıları yoxlayaq
Explanation: 2-ci indeksdə 'Valentina' adlı istifadəçi sorğulanan parameterlərə uyğun gəldi və "Female"-dən "Male"-yə dəyişdi.
INSERT
SQL-də INSERT əmri məlumatın əlavə olunması üçün istifadə olunur.
Nümaiş üçün staff_df-də yeni işçi əlavə edək:
SQL variantı:
Pandas vasitəsi ilə isə eyni nəticə almaq üçün artıq tanış olan .loc indeks köməkçisindən istifadə edərək sətr əlavə edirik.
Pandas variantı: DatafreymAdı.loc[ indeks ] = ['vergül', 'ilə', 'ayrılmış', 'dəyərlər']
İndeksi əldə etmək üçün datafreymin uzunluğun ölçüb uzunluğunu dəyər kimi ".loc"-a ötürək.
End of explanation
staff_df = staff_df.loc[staff_df['first_name'] != 'Omar']
staff_df.tail(3)
Explanation: DELETE
SQL-də DELETE əmri məlumatın silinməsi üçün istifadə olunur.
Hər-hansı bir məlumatı datafreymdən silmək istədikdə SQL-a əks məntiqdən istifadə etməliyik. Nümaiş üçün az əvvəl əlavə etdiyimiz "Ömər" və ayrı "Ömər" işçilərin silək.
SQL variantı: 
Yəni əgər SQL sorğu "staff_db-dən 'Ömər' adlı işçiləri poz" əmrin verirsə Pandas sorğusu "staff_db-də "Ömər" adlı işçilərdən başqa hamısın saxla məntiqi istifadə edir.
End of explanation
<END_TASK>