In [6]:
    
%pylab inline
import glob
import matplotlib.pyplot as plt
import numexpr
import os
import pandas as pd
import seaborn as sns
    
    
Populating the interactive namespace from numpy and matplotlib
tools/add_pitch_class_sets.shD:dorian12*16 = 192 columns per row
In [3]:
    
def impute_missing_key_files():
    path = 'data/beatles/keylab/The_Beatles/10CD2_-_The_Beatles/CD2_-_12_-_Revolution_9.lab'
    if not os.path.exists(path):
        df = pd.DataFrame.from_records(
            [("0.0", "502.204082", "Silence", None)],
            columns=['start', 'end', 'key_indicator', 'key_label'])
        df.to_csv(path, sep='\t', index=None, header=None)
impute_missing_key_files()
    
In [4]:
    
files = glob.glob('data/beatles/keylab/The_Beatles/*/*.lab')
print('key files count:', len(files))
files
    
    
key files count: 180
    Out[4]:
['data/beatles/keylab/The_Beatles/01_-_Please_Please_Me/01_-_I_Saw_Her_Standing_There.lab',
 'data/beatles/keylab/The_Beatles/01_-_Please_Please_Me/02_-_Misery.lab',
 'data/beatles/keylab/The_Beatles/01_-_Please_Please_Me/03_-_Anna_(Go_To_Him).lab',
 'data/beatles/keylab/The_Beatles/01_-_Please_Please_Me/04_-_Chains.lab',
 'data/beatles/keylab/The_Beatles/01_-_Please_Please_Me/05_-_Boys.lab',
 'data/beatles/keylab/The_Beatles/01_-_Please_Please_Me/06_-_Ask_Me_Why.lab',
 'data/beatles/keylab/The_Beatles/01_-_Please_Please_Me/07_-_Please_Please_Me.lab',
 'data/beatles/keylab/The_Beatles/01_-_Please_Please_Me/08_-_Love_Me_Do.lab',
 'data/beatles/keylab/The_Beatles/01_-_Please_Please_Me/09_-_P._S._I_Love_You.lab',
 "data/beatles/keylab/The_Beatles/01_-_Please_Please_Me/10_-_Baby_It's_You.lab",
 'data/beatles/keylab/The_Beatles/01_-_Please_Please_Me/11_-_Do_You_Want_To_Know_A_Secret.lab',
 'data/beatles/keylab/The_Beatles/01_-_Please_Please_Me/12_-_A_Taste_Of_Honey.lab',
 "data/beatles/keylab/The_Beatles/01_-_Please_Please_Me/13_-_There's_A_Place.lab",
 'data/beatles/keylab/The_Beatles/01_-_Please_Please_Me/14_-_Twist_And_Shout.lab',
 "data/beatles/keylab/The_Beatles/02_-_With_the_Beatles/01_-_It_Won't_Be_Long.lab",
 "data/beatles/keylab/The_Beatles/02_-_With_the_Beatles/02_-_All_I've_Got_To_Do.lab",
 'data/beatles/keylab/The_Beatles/02_-_With_the_Beatles/03_-_All_My_Loving.lab',
 "data/beatles/keylab/The_Beatles/02_-_With_the_Beatles/04_-_Don't_Bother_Me.lab",
 'data/beatles/keylab/The_Beatles/02_-_With_the_Beatles/05_-_Little_Child.lab',
 'data/beatles/keylab/The_Beatles/02_-_With_the_Beatles/06_-_Till_There_Was_You.lab',
 'data/beatles/keylab/The_Beatles/02_-_With_the_Beatles/07_-_Please_Mister_Postman.lab',
 'data/beatles/keylab/The_Beatles/02_-_With_the_Beatles/08_-_Roll_Over_Beethoven.lab',
 'data/beatles/keylab/The_Beatles/02_-_With_the_Beatles/09_-_Hold_Me_Tight.lab',
 'data/beatles/keylab/The_Beatles/02_-_With_the_Beatles/10_-_You_Really_Got_A_Hold_On_Me.lab',
 'data/beatles/keylab/The_Beatles/02_-_With_the_Beatles/11_-_I_Wanna_Be_Your_Man.lab',
 'data/beatles/keylab/The_Beatles/02_-_With_the_Beatles/12_-_Devil_In_Her_Heart.lab',
 'data/beatles/keylab/The_Beatles/02_-_With_the_Beatles/13_-_Not_A_Second_Time.lab',
 'data/beatles/keylab/The_Beatles/02_-_With_the_Beatles/14_-_Money.lab',
 "data/beatles/keylab/The_Beatles/03_-_A_Hard_Day's_Night/01_-_A_Hard_Day's_Night.lab",
 "data/beatles/keylab/The_Beatles/03_-_A_Hard_Day's_Night/02_-_I_Should_Have_Known_Better.lab",
 "data/beatles/keylab/The_Beatles/03_-_A_Hard_Day's_Night/03_-_If_I_Fell.lab",
 "data/beatles/keylab/The_Beatles/03_-_A_Hard_Day's_Night/04_-_I'm_Happy_Just_To_Dance_With_You.lab",
 "data/beatles/keylab/The_Beatles/03_-_A_Hard_Day's_Night/05_-_And_I_Love_Her.lab",
 "data/beatles/keylab/The_Beatles/03_-_A_Hard_Day's_Night/06_-_Tell_Me_Why.lab",
 "data/beatles/keylab/The_Beatles/03_-_A_Hard_Day's_Night/07_-_Can't_Buy_Me_Love.lab",
 "data/beatles/keylab/The_Beatles/03_-_A_Hard_Day's_Night/08_-_Any_Time_At_All.lab",
 "data/beatles/keylab/The_Beatles/03_-_A_Hard_Day's_Night/09_-_I'll_Cry_Instead.lab",
 "data/beatles/keylab/The_Beatles/03_-_A_Hard_Day's_Night/10_-_Things_We_Said_Today.lab",
 "data/beatles/keylab/The_Beatles/03_-_A_Hard_Day's_Night/11_-_When_I_Get_Home.lab",
 "data/beatles/keylab/The_Beatles/03_-_A_Hard_Day's_Night/12_-_You_Can't_Do_That.lab",
 "data/beatles/keylab/The_Beatles/03_-_A_Hard_Day's_Night/13_-_I'll_Be_Back.lab",
 'data/beatles/keylab/The_Beatles/04_-_Beatles_for_Sale/01_-_No_Reply.lab',
 "data/beatles/keylab/The_Beatles/04_-_Beatles_for_Sale/02_-_I'm_a_Loser.lab",
 "data/beatles/keylab/The_Beatles/04_-_Beatles_for_Sale/03_-_Baby's_In_Black.lab",
 'data/beatles/keylab/The_Beatles/04_-_Beatles_for_Sale/04_-_Rock_and_Roll_Music.lab',
 "data/beatles/keylab/The_Beatles/04_-_Beatles_for_Sale/05_-_I'll_Follow_the_Sun.lab",
 'data/beatles/keylab/The_Beatles/04_-_Beatles_for_Sale/06_-_Mr._Moonlight.lab',
 'data/beatles/keylab/The_Beatles/04_-_Beatles_for_Sale/07_-_Kansas_City-_Hey,_Hey,_Hey,_Hey.lab',
 'data/beatles/keylab/The_Beatles/04_-_Beatles_for_Sale/08_-_Eight_Days_a_Week.lab',
 'data/beatles/keylab/The_Beatles/04_-_Beatles_for_Sale/09_-_Words_of_Love.lab',
 "data/beatles/keylab/The_Beatles/04_-_Beatles_for_Sale/10_-_Honey_Don't.lab",
 'data/beatles/keylab/The_Beatles/04_-_Beatles_for_Sale/11_-_Every_Little_Thing.lab',
 "data/beatles/keylab/The_Beatles/04_-_Beatles_for_Sale/12_-_I_Don't_Want_to_Spoil_the_Party.lab",
 "data/beatles/keylab/The_Beatles/04_-_Beatles_for_Sale/13_-_What_You're_Doing.lab",
 "data/beatles/keylab/The_Beatles/04_-_Beatles_for_Sale/14_-_Everybody's_Trying_to_Be_My_Baby.lab",
 'data/beatles/keylab/The_Beatles/05_-_Help!/01_-_Help!.lab',
 'data/beatles/keylab/The_Beatles/05_-_Help!/02_-_The_Night_Before.lab',
 "data/beatles/keylab/The_Beatles/05_-_Help!/03_-_You've_Got_To_Hide_Your_Love_Away.lab",
 'data/beatles/keylab/The_Beatles/05_-_Help!/04_-_I_Need_You.lab',
 'data/beatles/keylab/The_Beatles/05_-_Help!/05_-_Another_Girl.lab',
 "data/beatles/keylab/The_Beatles/05_-_Help!/06_-_You're_Going_To_Lose_That_Girl.lab",
 'data/beatles/keylab/The_Beatles/05_-_Help!/07_-_Ticket_To_Ride.lab',
 'data/beatles/keylab/The_Beatles/05_-_Help!/08_-_Act_Naturally.lab',
 "data/beatles/keylab/The_Beatles/05_-_Help!/09_-_It's_Only_Love.lab",
 'data/beatles/keylab/The_Beatles/05_-_Help!/10_-_You_Like_Me_Too_Much.lab',
 'data/beatles/keylab/The_Beatles/05_-_Help!/11_-_Tell_Me_What_You_See.lab',
 "data/beatles/keylab/The_Beatles/05_-_Help!/12_-_I've_Just_Seen_a_Face.lab",
 'data/beatles/keylab/The_Beatles/05_-_Help!/13_-_Yesterday.lab',
 'data/beatles/keylab/The_Beatles/05_-_Help!/14_-_Dizzy_Miss_Lizzy.lab',
 'data/beatles/keylab/The_Beatles/06_-_Rubber_Soul/01_-_Drive_My_Car.lab',
 'data/beatles/keylab/The_Beatles/06_-_Rubber_Soul/02_-_Norwegian_Wood_(This_Bird_Has_Flown).lab',
 "data/beatles/keylab/The_Beatles/06_-_Rubber_Soul/03_-_You_Won't_See_Me.lab",
 'data/beatles/keylab/The_Beatles/06_-_Rubber_Soul/04_-_Nowhere_Man.lab',
 'data/beatles/keylab/The_Beatles/06_-_Rubber_Soul/05_-_Think_For_Yourself.lab',
 'data/beatles/keylab/The_Beatles/06_-_Rubber_Soul/06_-_The_Word.lab',
 'data/beatles/keylab/The_Beatles/06_-_Rubber_Soul/07_-_Michelle.lab',
 'data/beatles/keylab/The_Beatles/06_-_Rubber_Soul/08_-_What_Goes_On.lab',
 'data/beatles/keylab/The_Beatles/06_-_Rubber_Soul/09_-_Girl.lab',
 "data/beatles/keylab/The_Beatles/06_-_Rubber_Soul/10_-_I'm_Looking_Through_You.lab",
 'data/beatles/keylab/The_Beatles/06_-_Rubber_Soul/11_-_In_My_Life.lab',
 'data/beatles/keylab/The_Beatles/06_-_Rubber_Soul/12_-_Wait.lab',
 'data/beatles/keylab/The_Beatles/06_-_Rubber_Soul/13_-_If_I_Needed_Someone.lab',
 'data/beatles/keylab/The_Beatles/06_-_Rubber_Soul/14_-_Run_For_Your_Life.lab',
 'data/beatles/keylab/The_Beatles/07_-_Revolver/01_-_Taxman.lab',
 'data/beatles/keylab/The_Beatles/07_-_Revolver/02_-_Eleanor_Rigby.lab',
 "data/beatles/keylab/The_Beatles/07_-_Revolver/03_-_I'm_Only_Sleeping.lab",
 'data/beatles/keylab/The_Beatles/07_-_Revolver/04_-_Love_You_To.lab',
 'data/beatles/keylab/The_Beatles/07_-_Revolver/05_-_Here,_There_And_Everywhere.lab',
 'data/beatles/keylab/The_Beatles/07_-_Revolver/06_-_Yellow_Submarine.lab',
 'data/beatles/keylab/The_Beatles/07_-_Revolver/07_-_She_Said_She_Said.lab',
 'data/beatles/keylab/The_Beatles/07_-_Revolver/08_-_Good_Day_Sunshine.lab',
 'data/beatles/keylab/The_Beatles/07_-_Revolver/09_-_And_Your_Bird_Can_Sing.lab',
 'data/beatles/keylab/The_Beatles/07_-_Revolver/10_-_For_No_One.lab',
 'data/beatles/keylab/The_Beatles/07_-_Revolver/11_-_Doctor_Robert.lab',
 'data/beatles/keylab/The_Beatles/07_-_Revolver/12_-_I_Want_To_Tell_You.lab',
 'data/beatles/keylab/The_Beatles/07_-_Revolver/13_-_Got_To_Get_You_Into_My_Life.lab',
 'data/beatles/keylab/The_Beatles/07_-_Revolver/14_-_Tomorrow_Never_Knows.lab',
 "data/beatles/keylab/The_Beatles/08_-_Sgt._Pepper's_Lonely_Hearts_Club_Band/01_-_Sgt._Pepper's_Lonely_Hearts_Club_Band.lab",
 "data/beatles/keylab/The_Beatles/08_-_Sgt._Pepper's_Lonely_Hearts_Club_Band/02_-_With_A_Little_Help_From_My_Friends.lab",
 "data/beatles/keylab/The_Beatles/08_-_Sgt._Pepper's_Lonely_Hearts_Club_Band/03_-_Lucy_In_The_Sky_With_Diamonds.lab",
 "data/beatles/keylab/The_Beatles/08_-_Sgt._Pepper's_Lonely_Hearts_Club_Band/04_-_Getting_Better.lab",
 "data/beatles/keylab/The_Beatles/08_-_Sgt._Pepper's_Lonely_Hearts_Club_Band/05_-_Fixing_A_Hole.lab",
 "data/beatles/keylab/The_Beatles/08_-_Sgt._Pepper's_Lonely_Hearts_Club_Band/06_-_She's_Leaving_Home.lab",
 "data/beatles/keylab/The_Beatles/08_-_Sgt._Pepper's_Lonely_Hearts_Club_Band/07_-_Being_For_The_Benefit_Of_Mr._Kite!.lab",
 "data/beatles/keylab/The_Beatles/08_-_Sgt._Pepper's_Lonely_Hearts_Club_Band/08_-_Within_You_Without_You.lab",
 "data/beatles/keylab/The_Beatles/08_-_Sgt._Pepper's_Lonely_Hearts_Club_Band/09_-_When_I'm_Sixty-Four.lab",
 "data/beatles/keylab/The_Beatles/08_-_Sgt._Pepper's_Lonely_Hearts_Club_Band/10_-_Lovely_Rita.lab",
 "data/beatles/keylab/The_Beatles/08_-_Sgt._Pepper's_Lonely_Hearts_Club_Band/11_-_Good_Morning_Good_Morning.lab",
 "data/beatles/keylab/The_Beatles/08_-_Sgt._Pepper's_Lonely_Hearts_Club_Band/12_-_Sgt._Pepper's_Lonely_Hearts_Club_Band_(Reprise).lab",
 "data/beatles/keylab/The_Beatles/08_-_Sgt._Pepper's_Lonely_Hearts_Club_Band/13_-_A_Day_In_The_Life.lab",
 'data/beatles/keylab/The_Beatles/09_-_Magical_Mystery_Tour/01_-_Magical_Mystery_Tour.lab',
 'data/beatles/keylab/The_Beatles/09_-_Magical_Mystery_Tour/02_-_The_Fool_On_The_Hill.lab',
 'data/beatles/keylab/The_Beatles/09_-_Magical_Mystery_Tour/03_-_Flying.lab',
 'data/beatles/keylab/The_Beatles/09_-_Magical_Mystery_Tour/04_-_Blue_Jay_Way.lab',
 'data/beatles/keylab/The_Beatles/09_-_Magical_Mystery_Tour/05_-_Your_Mother_Should_Know.lab',
 'data/beatles/keylab/The_Beatles/09_-_Magical_Mystery_Tour/06_-_I_Am_The_Walrus.lab',
 'data/beatles/keylab/The_Beatles/09_-_Magical_Mystery_Tour/07_-_Hello_Goodbye.lab',
 'data/beatles/keylab/The_Beatles/09_-_Magical_Mystery_Tour/08_-_Strawberry_Fields_Forever.lab',
 'data/beatles/keylab/The_Beatles/09_-_Magical_Mystery_Tour/09_-_Penny_Lane.lab',
 "data/beatles/keylab/The_Beatles/09_-_Magical_Mystery_Tour/10_-_Baby_You're_A_Rich_Man.lab",
 'data/beatles/keylab/The_Beatles/09_-_Magical_Mystery_Tour/11_-_All_You_Need_Is_Love.lab',
 'data/beatles/keylab/The_Beatles/10CD1_-_The_Beatles/CD1_-_01_-_Back_in_the_USSR.lab',
 'data/beatles/keylab/The_Beatles/10CD1_-_The_Beatles/CD1_-_02_-_Dear_Prudence.lab',
 'data/beatles/keylab/The_Beatles/10CD1_-_The_Beatles/CD1_-_03_-_Glass_Onion.lab',
 'data/beatles/keylab/The_Beatles/10CD1_-_The_Beatles/CD1_-_04_-_Ob-La-Di,_Ob-La-Da.lab',
 'data/beatles/keylab/The_Beatles/10CD1_-_The_Beatles/CD1_-_05_-_Wild_Honey_Pie.lab',
 'data/beatles/keylab/The_Beatles/10CD1_-_The_Beatles/CD1_-_06_-_The_Continuing_Story_of_Bungalow_Bill.lab',
 'data/beatles/keylab/The_Beatles/10CD1_-_The_Beatles/CD1_-_07_-_While_My_Guitar_Gently_Weeps.lab',
 'data/beatles/keylab/The_Beatles/10CD1_-_The_Beatles/CD1_-_08_-_Happiness_is_a_Warm_Gun.lab',
 'data/beatles/keylab/The_Beatles/10CD1_-_The_Beatles/CD1_-_09_-_Martha_My_Dear.lab',
 "data/beatles/keylab/The_Beatles/10CD1_-_The_Beatles/CD1_-_10_-_I'm_So_Tired.lab",
 'data/beatles/keylab/The_Beatles/10CD1_-_The_Beatles/CD1_-_11_-_Black_Bird.lab',
 'data/beatles/keylab/The_Beatles/10CD1_-_The_Beatles/CD1_-_12_-_Piggies.lab',
 'data/beatles/keylab/The_Beatles/10CD1_-_The_Beatles/CD1_-_13_-_Rocky_Raccoon.lab',
 "data/beatles/keylab/The_Beatles/10CD1_-_The_Beatles/CD1_-_14_-_Don't_Pass_Me_By.lab",
 "data/beatles/keylab/The_Beatles/10CD1_-_The_Beatles/CD1_-_15_-_Why_Don't_We_Do_It_In_The_Road.lab",
 'data/beatles/keylab/The_Beatles/10CD1_-_The_Beatles/CD1_-_16_-_I_Will.lab',
 'data/beatles/keylab/The_Beatles/10CD1_-_The_Beatles/CD1_-_17_-_Julia.lab',
 'data/beatles/keylab/The_Beatles/10CD2_-_The_Beatles/CD2_-_01_-_Birthday.lab',
 'data/beatles/keylab/The_Beatles/10CD2_-_The_Beatles/CD2_-_02_-_Yer_Blues.lab',
 "data/beatles/keylab/The_Beatles/10CD2_-_The_Beatles/CD2_-_03_-_Mother_Nature's_Son.lab",
 "data/beatles/keylab/The_Beatles/10CD2_-_The_Beatles/CD2_-_04_-_Everybody's_Got_Something_To_Hide_Except_Me_and_My_Monkey.lab",
 'data/beatles/keylab/The_Beatles/10CD2_-_The_Beatles/CD2_-_05_-_Sexy_Sadie.lab',
 'data/beatles/keylab/The_Beatles/10CD2_-_The_Beatles/CD2_-_06_-_Helter_Skelter.lab',
 'data/beatles/keylab/The_Beatles/10CD2_-_The_Beatles/CD2_-_07_-_Long_Long_Long.lab',
 'data/beatles/keylab/The_Beatles/10CD2_-_The_Beatles/CD2_-_08_-_Revolution_1.lab',
 'data/beatles/keylab/The_Beatles/10CD2_-_The_Beatles/CD2_-_09_-_Honey_Pie.lab',
 'data/beatles/keylab/The_Beatles/10CD2_-_The_Beatles/CD2_-_10_-_Savoy_Truffle.lab',
 'data/beatles/keylab/The_Beatles/10CD2_-_The_Beatles/CD2_-_11_-_Cry_Baby_Cry.lab',
 'data/beatles/keylab/The_Beatles/10CD2_-_The_Beatles/CD2_-_12_-_Revolution_9.lab',
 'data/beatles/keylab/The_Beatles/10CD2_-_The_Beatles/CD2_-_13_-_Good_Night.lab',
 'data/beatles/keylab/The_Beatles/11_-_Abbey_Road/01_-_Come_Together.lab',
 'data/beatles/keylab/The_Beatles/11_-_Abbey_Road/02_-_Something.lab',
 "data/beatles/keylab/The_Beatles/11_-_Abbey_Road/03_-_Maxwell's_Silver_Hammer.lab",
 'data/beatles/keylab/The_Beatles/11_-_Abbey_Road/04_-_Oh!_Darling.lab',
 "data/beatles/keylab/The_Beatles/11_-_Abbey_Road/05_-_Octopus's_Garden.lab",
 'data/beatles/keylab/The_Beatles/11_-_Abbey_Road/06_-_I_Want_You.lab',
 'data/beatles/keylab/The_Beatles/11_-_Abbey_Road/07_-_Here_Comes_The_Sun.lab',
 'data/beatles/keylab/The_Beatles/11_-_Abbey_Road/08_-_Because.lab',
 'data/beatles/keylab/The_Beatles/11_-_Abbey_Road/09_-_You_Never_Give_Me_Your_Money.lab',
 'data/beatles/keylab/The_Beatles/11_-_Abbey_Road/10_-_Sun_King.lab',
 'data/beatles/keylab/The_Beatles/11_-_Abbey_Road/11_-_Mean_Mr_Mustard.lab',
 'data/beatles/keylab/The_Beatles/11_-_Abbey_Road/12_-_Polythene_Pam.lab',
 'data/beatles/keylab/The_Beatles/11_-_Abbey_Road/13_-_She_Came_In_Through_The_Bathroom_Window.lab',
 'data/beatles/keylab/The_Beatles/11_-_Abbey_Road/14_-_Golden_Slumbers.lab',
 'data/beatles/keylab/The_Beatles/11_-_Abbey_Road/15_-_Carry_That_Weight.lab',
 'data/beatles/keylab/The_Beatles/11_-_Abbey_Road/16_-_The_End.lab',
 'data/beatles/keylab/The_Beatles/11_-_Abbey_Road/17_-_Her_Majesty.lab',
 'data/beatles/keylab/The_Beatles/12_-_Let_It_Be/01_-_Two_of_Us.lab',
 'data/beatles/keylab/The_Beatles/12_-_Let_It_Be/02_-_Dig_a_Pony.lab',
 'data/beatles/keylab/The_Beatles/12_-_Let_It_Be/03_-_Across_the_Universe.lab',
 'data/beatles/keylab/The_Beatles/12_-_Let_It_Be/04_-_I_Me_Mine.lab',
 'data/beatles/keylab/The_Beatles/12_-_Let_It_Be/05_-_Dig_It.lab',
 'data/beatles/keylab/The_Beatles/12_-_Let_It_Be/06_-_Let_It_Be.lab',
 'data/beatles/keylab/The_Beatles/12_-_Let_It_Be/07_-_Maggie_Mae.lab',
 "data/beatles/keylab/The_Beatles/12_-_Let_It_Be/08_-_I've_Got_A_Feeling.lab",
 'data/beatles/keylab/The_Beatles/12_-_Let_It_Be/09_-_One_After_909.lab',
 'data/beatles/keylab/The_Beatles/12_-_Let_It_Be/10_-_The_Long_and_Winding_Road.lab',
 'data/beatles/keylab/The_Beatles/12_-_Let_It_Be/11_-_For_You_Blue.lab',
 'data/beatles/keylab/The_Beatles/12_-_Let_It_Be/12_-_Get_Back.lab']
In [5]:
    
def read_key_file(path):
    return pd.read_csv(path, sep='\t', header=None, names=['start','end','key_indicator','key_label'])
    
In [6]:
    
read_key_file(files[0])
    
    Out[6]:
  
    
       
      start 
      end 
      key_indicator 
      key_label 
     
  
  
    
      0 
         0.000 
         1.035 
       Silence 
       NaN 
     
    
      1 
         1.035 
       171.880 
           Key 
         E 
     
    
      2 
       171.880 
       175.800 
       Silence 
       NaN 
     
  
In [7]:
    
def add_track_id(df, track_id):
    df['track_id'] = track_id
    return df
    
In [8]:
    
keys = pd.concat(add_track_id(read_key_file(file), track_id) for (track_id, file) in enumerate(files))
    
In [9]:
    
keys
    
    Out[9]:
  
    
       
      start 
      end 
      key_indicator 
      key_label 
      track_id 
     
  
  
    
      0 
         0.000 
         1.035 
       Silence 
                NaN 
         0 
     
    
      1 
         1.035 
       171.880 
           Key 
                  E 
         0 
     
    
      2 
       171.880 
       175.800 
       Silence 
                NaN 
         0 
     
    
      0 
         0.000 
         0.395 
       Silence 
                NaN 
         1 
     
    
      1 
         0.395 
       105.685 
           Key 
                  C 
         1 
     
    
      2 
       105.685 
       110.160 
       Silence 
                NaN 
         1 
     
    
      0 
         0.000 
         0.410 
       Silence 
                NaN 
         2 
     
    
      1 
         0.410 
       174.120 
           Key 
                  D 
         2 
     
    
      2 
       174.120 
       177.573 
       Silence 
                NaN 
         2 
     
    
      0 
         0.000 
       146.493 
           Key 
                 Bb 
         3 
     
    
      0 
         0.000 
       147.507 
           Key 
                  E 
         4 
     
    
      0 
         0.000 
       147.760 
           Key 
                  E 
         5 
     
    
      0 
         0.000 
       123.373 
           Key 
                  E 
         6 
     
    
      0 
         0.000 
       142.760 
           Key 
                  G 
         7 
     
    
      0 
         0.000 
       125.733 
           Key 
          D:aeolian 
         8 
     
    
      0 
         0.000 
       158.067 
           Key 
                  G 
         9 
     
    
      0 
         0.000 
       119.333 
           Key 
                  E 
        10 
     
    
      0 
         0.000 
       125.133 
           Key 
           F#:minor 
        11 
     
    
      0 
         0.000 
       112.867 
           Key 
                  E 
        12 
     
    
      0 
         0.000 
       153.267 
           Key 
                  D 
        13 
     
    
      0 
         0.000 
         1.030 
       Silence 
                NaN 
        14 
     
    
      1 
         1.030 
       129.940 
           Key 
                  E 
        14 
     
    
      2 
       129.940 
       133.733 
       Silence 
                NaN 
        14 
     
    
      0 
         0.000 
         0.429 
       Silence 
                NaN 
        15 
     
    
      1 
         0.429 
       120.271 
           Key 
                  E 
        15 
     
    
      2 
       120.271 
       124.533 
       Silence 
                NaN 
        15 
     
    
      0 
         0.000 
         0.383 
       Silence 
                NaN 
        16 
     
    
      1 
         0.383 
       125.530 
           Key 
                  E 
        16 
     
    
      2 
       125.530 
       129.560 
       Silence 
                NaN 
        16 
     
    
      0 
         0.000 
         0.430 
       Silence 
                NaN 
        17 
     
    
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
     
    
      2 
       229.350 
       234.800 
       Silence 
                NaN 
       169 
     
    
      0 
         0.000 
         0.355 
       Silence 
                NaN 
       170 
     
    
      1 
         0.355 
       222.650 
           Key 
                  D 
       170 
     
    
      2 
       222.650 
       228.560 
       Silence 
                NaN 
       170 
     
    
      0 
         0.000 
         0.375 
       Silence 
                NaN 
       171 
     
    
      1 
         0.375 
       144.340 
           Key 
            A:minor 
       171 
     
    
      2 
       144.340 
       145.733 
       Silence 
                NaN 
       171 
     
    
      0 
         0.000 
         1.480 
       Silence 
                NaN 
       172 
     
    
      1 
         1.480 
        50.000 
           Key 
                  F 
       172 
     
    
      2 
        50.000 
        50.000 
       Silence 
                NaN 
       172 
     
    
      0 
         0.000 
       241.355 
           Key 
                  C 
       173 
     
    
      1 
       241.355 
       243.307 
       Silence 
                NaN 
       173 
     
    
      0 
         0.000 
         0.345 
       Silence 
                NaN 
       174 
     
    
      1 
         0.345 
        38.005 
           Key 
                  G 
       174 
     
    
      2 
        38.005 
        40.600 
       Silence 
                NaN 
       174 
     
    
      0 
         0.000 
         0.395 
       Silence 
                NaN 
       175 
     
    
      1 
         0.395 
       214.135 
           Key 
                  A 
       175 
     
    
      2 
       214.135 
       217.960 
       Silence 
                NaN 
       175 
     
    
      0 
         0.000 
         0.350 
       Silence 
                NaN 
       176 
     
    
      1 
         0.350 
       170.535 
           Key 
                  B 
       176 
     
    
      2 
       170.535 
       175.507 
       Silence 
                NaN 
       176 
     
    
      0 
         0.000 
         0.345 
       Silence 
                NaN 
       177 
     
    
      1 
         0.345 
       215.990 
           Key 
                 Eb 
       177 
     
    
      2 
       215.990 
       217.867 
       Silence 
                NaN 
       177 
     
    
      0 
         0.000 
         0.450 
       Silence 
                NaN 
       178 
     
    
      1 
         0.450 
       149.205 
           Key 
                  D 
       178 
     
    
      2 
       149.205 
       152.733 
       Silence 
                NaN 
       178 
     
    
      0 
         0.000 
         0.365 
       Silence 
                NaN 
       179 
     
    
      1 
         0.365 
       185.355 
           Key 
       A:mixolydian 
       179 
     
    
      2 
       185.355 
       187.093 
       Silence 
                NaN 
       179 
     
  
408 rows × 5 columns
In [10]:
    
keys['duration'] = keys['end'] - keys['start']
    
In [11]:
    
keys['key_label'].value_counts()
    
    Out[11]:
A               51
G               40
E               35
C               28
A:minor         25
D               25
F               13
E:minor         11
D:minor          9
C:minor          8
B                6
Eb               6
Bb               5
F:minor          5
C#:minor         4
F#:minor         2
G:mixolydian     2
Db               1
F:dorian         1
D:aeolian        1
A:mixolydian     1
C#:modal         1
F#               1
D:mixolydian     1
Eb:minor         1
Ab               1
dtype: int64
In [12]:
    
print('total number of key segments:', len(keys))
    
    
total number of key segments: 408
In [13]:
    
keys['duration'].describe()
    
    Out[13]:
count    408.000000
mean      71.893412
std       81.089744
min       -0.043000
25%        3.849000
50%       27.304000
75%      143.846750
max      502.204082
Name: duration, dtype: float64
In [14]:
    
sns.distplot(keys['duration'], bins=50)
title('distribution of key segment duration (sec)');
    
    
 
In [15]:
    
keys['key_indicator'].value_counts()
    
    Out[15]:
Key        284
Silence    124
dtype: int64
In [16]:
    
# Total duration of segments with some key and with silence:
keys.groupby('key_indicator').sum()['duration']
    
    Out[16]:
key_indicator
Key              28589.011000
Silence            743.501082
Name: duration, dtype: float64
In [17]:
    
# The same in percentage:
keys.groupby('key_indicator').sum()['duration'] / keys['duration'].sum() * 100
    
    Out[17]:
key_indicator
Key              97.465266
Silence           2.534734
Name: duration, dtype: float64
Distribution of number of key segments among songs.
In [18]:
    
keys.groupby('track_id').count()['start'].describe()
    
    Out[18]:
count    180.000000
mean       2.266667
std        2.372091
min        1.000000
25%        1.000000
50%        1.000000
75%        3.000000
max       18.000000
Name: start, dtype: float64
We need to map symbolic key labels to pitch classes. Since the label are not always referring to the diatonic key but sometimes to modes, we normalize the pitch class to represent the underlying diatonic key. This would help in our further classification since it reduces the number of classes and their meaning. In order key we can limit ourselves not to discriminate between modes.
In [19]:
    
diatonic_pitch_classes = {'C': 0, 'D': 2, 'E': 4, 'F': 5, 'G': 7, 'A': 9, 'B': 11}
accidental_shifts = {'': 0, 'b': -1, '#': 1}
mode_shifts = {
    '': 0,
    'major': 0,
    'ionian': 0,
    'dorian': -2,
    'phrygian': -4,
    'lydian': -5,
    'mixolydian': -7,
    'aeolian': -9,
    'minor': -9,
    'locrian': -11}
def tone_label_to_pitch_class(label):
    base = label[0].upper()
    pitch_class = diatonic_pitch_classes[base]
    accidental = label[1] if len(label) > 1 else ''
    shift = accidental_shifts[accidental]
    return ((pitch_class + shift) + 12) % 12
def diatonic_root_for_key_label(key_label):
    if type(key_label) is not str:
        return
    parts = key_label.split(':')
    modal_root_label = parts[0]
    modal_root_pitch_class = tone_label_to_pitch_class(modal_root_label)
    mode_label = parts[1].lower() if len(parts) > 1 else ''
    mode_shift = mode_shifts[mode_label] if mode_label in mode_shifts else 0
    diatonic_root = modal_root_pitch_class + mode_shift
#     return (modal_root_label, mode_label, modal_root_pitch_class, mode_shift, diatonic_root)
    return (diatonic_root + 12) % 12
    
unique_key_labels = list(keys['key_label'].value_counts().index)
[(label, diatonic_root_for_key_label(label)) for label in unique_key_labels]
    
    Out[19]:
[('A', 9),
 ('G', 7),
 ('E', 4),
 ('C', 0),
 ('A:minor', 0),
 ('D', 2),
 ('F', 5),
 ('E:minor', 7),
 ('D:minor', 5),
 ('C:minor', 3),
 ('B', 11),
 ('Eb', 3),
 ('Bb', 10),
 ('F:minor', 8),
 ('C#:minor', 4),
 ('F#:minor', 9),
 ('G:mixolydian', 0),
 ('Db', 1),
 ('F:dorian', 3),
 ('D:aeolian', 5),
 ('A:mixolydian', 2),
 ('C#:modal', 1),
 ('F#', 6),
 ('D:mixolydian', 7),
 ('Eb:minor', 6),
 ('Ab', 8)]
In [20]:
    
keys['key_diatonic_root'] = keys['key_label'].apply(diatonic_root_for_key_label)
    
In [21]:
    
canonic_pitch_class_labels = dict(enumerate(['C', 'Db', 'D', 'Eb', 'E', 'F', 'Gb', 'G', 'Ab', 'A', 'Bb', 'B']))
def label_for_pitch_class(pc):
    if pc in canonic_pitch_class_labels:
        return canonic_pitch_class_labels[pc]
    
In [22]:
    
keys['key_diatonic_root_label'] = keys['key_diatonic_root'].apply(label_for_pitch_class)
    
In [23]:
    
diatonic_keys_hist = keys.dropna()['key_diatonic_root_label'].value_counts()
diatonic_keys_hist
    
    Out[23]:
C     55
A     53
G     52
E     39
D     26
F     23
Eb    15
B      6
Ab     6
Bb     5
Gb     2
Db     2
dtype: int64
In [24]:
    
plot(diatonic_keys_hist)
xticks(np.arange(len(diatonic_keys_hist)), diatonic_keys_hist.index)
title('diatonic key usage among all songs');
    
    
 
In [25]:
    
# all tracks start at 0.0 time
assert (keys.groupby('track_id').first()['start'] == 0).all()
# duration of each segment should be positive
# assert (keys.groupby('track_id')['duration'] < 0).all()
    
In [26]:
    
keys.groupby('track_id').last()['end']
    
    Out[26]:
track_id
0           175.800
1           110.160
2           177.573
3           146.493
4           147.507
5           147.760
6           123.373
7           142.760
8           125.733
9           158.067
10          119.333
11          125.133
12          112.867
13          153.267
14          133.733
...
165          96.867
166         139.827
167          23.267
168         216.667
169         234.800
170         228.560
171         145.733
172          50.000
173         243.307
174          40.600
175         217.960
176         175.507
177         217.867
178         152.733
179         187.093
Name: end, Length: 180, dtype: float64
In [27]:
    
keys
    
    Out[27]:
  
    
       
      start 
      end 
      key_indicator 
      key_label 
      track_id 
      duration 
      key_diatonic_root 
      key_diatonic_root_label 
     
  
  
    
      0 
         0.000 
         1.035 
       Silence 
                NaN 
         0 
         1.035 
      NaN 
       None 
     
    
      1 
         1.035 
       171.880 
           Key 
                  E 
         0 
       170.845 
        4 
          E 
     
    
      2 
       171.880 
       175.800 
       Silence 
                NaN 
         0 
         3.920 
      NaN 
       None 
     
    
      0 
         0.000 
         0.395 
       Silence 
                NaN 
         1 
         0.395 
      NaN 
       None 
     
    
      1 
         0.395 
       105.685 
           Key 
                  C 
         1 
       105.290 
        0 
          C 
     
    
      2 
       105.685 
       110.160 
       Silence 
                NaN 
         1 
         4.475 
      NaN 
       None 
     
    
      0 
         0.000 
         0.410 
       Silence 
                NaN 
         2 
         0.410 
      NaN 
       None 
     
    
      1 
         0.410 
       174.120 
           Key 
                  D 
         2 
       173.710 
        2 
          D 
     
    
      2 
       174.120 
       177.573 
       Silence 
                NaN 
         2 
         3.453 
      NaN 
       None 
     
    
      0 
         0.000 
       146.493 
           Key 
                 Bb 
         3 
       146.493 
       10 
         Bb 
     
    
      0 
         0.000 
       147.507 
           Key 
                  E 
         4 
       147.507 
        4 
          E 
     
    
      0 
         0.000 
       147.760 
           Key 
                  E 
         5 
       147.760 
        4 
          E 
     
    
      0 
         0.000 
       123.373 
           Key 
                  E 
         6 
       123.373 
        4 
          E 
     
    
      0 
         0.000 
       142.760 
           Key 
                  G 
         7 
       142.760 
        7 
          G 
     
    
      0 
         0.000 
       125.733 
           Key 
          D:aeolian 
         8 
       125.733 
        5 
          F 
     
    
      0 
         0.000 
       158.067 
           Key 
                  G 
         9 
       158.067 
        7 
          G 
     
    
      0 
         0.000 
       119.333 
           Key 
                  E 
        10 
       119.333 
        4 
          E 
     
    
      0 
         0.000 
       125.133 
           Key 
           F#:minor 
        11 
       125.133 
        9 
          A 
     
    
      0 
         0.000 
       112.867 
           Key 
                  E 
        12 
       112.867 
        4 
          E 
     
    
      0 
         0.000 
       153.267 
           Key 
                  D 
        13 
       153.267 
        2 
          D 
     
    
      0 
         0.000 
         1.030 
       Silence 
                NaN 
        14 
         1.030 
      NaN 
       None 
     
    
      1 
         1.030 
       129.940 
           Key 
                  E 
        14 
       128.910 
        4 
          E 
     
    
      2 
       129.940 
       133.733 
       Silence 
                NaN 
        14 
         3.793 
      NaN 
       None 
     
    
      0 
         0.000 
         0.429 
       Silence 
                NaN 
        15 
         0.429 
      NaN 
       None 
     
    
      1 
         0.429 
       120.271 
           Key 
                  E 
        15 
       119.842 
        4 
          E 
     
    
      2 
       120.271 
       124.533 
       Silence 
                NaN 
        15 
         4.262 
      NaN 
       None 
     
    
      0 
         0.000 
         0.383 
       Silence 
                NaN 
        16 
         0.383 
      NaN 
       None 
     
    
      1 
         0.383 
       125.530 
           Key 
                  E 
        16 
       125.147 
        4 
          E 
     
    
      2 
       125.530 
       129.560 
       Silence 
                NaN 
        16 
         4.030 
      NaN 
       None 
     
    
      0 
         0.000 
         0.430 
       Silence 
                NaN 
        17 
         0.430 
      NaN 
       None 
     
    
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
     
    
      2 
       229.350 
       234.800 
       Silence 
                NaN 
       169 
         5.450 
      NaN 
       None 
     
    
      0 
         0.000 
         0.355 
       Silence 
                NaN 
       170 
         0.355 
      NaN 
       None 
     
    
      1 
         0.355 
       222.650 
           Key 
                  D 
       170 
       222.295 
        2 
          D 
     
    
      2 
       222.650 
       228.560 
       Silence 
                NaN 
       170 
         5.910 
      NaN 
       None 
     
    
      0 
         0.000 
         0.375 
       Silence 
                NaN 
       171 
         0.375 
      NaN 
       None 
     
    
      1 
         0.375 
       144.340 
           Key 
            A:minor 
       171 
       143.965 
        0 
          C 
     
    
      2 
       144.340 
       145.733 
       Silence 
                NaN 
       171 
         1.393 
      NaN 
       None 
     
    
      0 
         0.000 
         1.480 
       Silence 
                NaN 
       172 
         1.480 
      NaN 
       None 
     
    
      1 
         1.480 
        50.000 
           Key 
                  F 
       172 
        48.520 
        5 
          F 
     
    
      2 
        50.000 
        50.000 
       Silence 
                NaN 
       172 
         0.000 
      NaN 
       None 
     
    
      0 
         0.000 
       241.355 
           Key 
                  C 
       173 
       241.355 
        0 
          C 
     
    
      1 
       241.355 
       243.307 
       Silence 
                NaN 
       173 
         1.952 
      NaN 
       None 
     
    
      0 
         0.000 
         0.345 
       Silence 
                NaN 
       174 
         0.345 
      NaN 
       None 
     
    
      1 
         0.345 
        38.005 
           Key 
                  G 
       174 
        37.660 
        7 
          G 
     
    
      2 
        38.005 
        40.600 
       Silence 
                NaN 
       174 
         2.595 
      NaN 
       None 
     
    
      0 
         0.000 
         0.395 
       Silence 
                NaN 
       175 
         0.395 
      NaN 
       None 
     
    
      1 
         0.395 
       214.135 
           Key 
                  A 
       175 
       213.740 
        9 
          A 
     
    
      2 
       214.135 
       217.960 
       Silence 
                NaN 
       175 
         3.825 
      NaN 
       None 
     
    
      0 
         0.000 
         0.350 
       Silence 
                NaN 
       176 
         0.350 
      NaN 
       None 
     
    
      1 
         0.350 
       170.535 
           Key 
                  B 
       176 
       170.185 
       11 
          B 
     
    
      2 
       170.535 
       175.507 
       Silence 
                NaN 
       176 
         4.972 
      NaN 
       None 
     
    
      0 
         0.000 
         0.345 
       Silence 
                NaN 
       177 
         0.345 
      NaN 
       None 
     
    
      1 
         0.345 
       215.990 
           Key 
                 Eb 
       177 
       215.645 
        3 
         Eb 
     
    
      2 
       215.990 
       217.867 
       Silence 
                NaN 
       177 
         1.877 
      NaN 
       None 
     
    
      0 
         0.000 
         0.450 
       Silence 
                NaN 
       178 
         0.450 
      NaN 
       None 
     
    
      1 
         0.450 
       149.205 
           Key 
                  D 
       178 
       148.755 
        2 
          D 
     
    
      2 
       149.205 
       152.733 
       Silence 
                NaN 
       178 
         3.528 
      NaN 
       None 
     
    
      0 
         0.000 
         0.365 
       Silence 
                NaN 
       179 
         0.365 
      NaN 
       None 
     
    
      1 
         0.365 
       185.355 
           Key 
       A:mixolydian 
       179 
       184.990 
        2 
          D 
     
    
      2 
       185.355 
       187.093 
       Silence 
                NaN 
       179 
         1.738 
      NaN 
       None 
     
  
408 rows × 8 columns
Export the prepared DataFrame to TSV file.
In [28]:
    
keys = keys[[
        'track_id', 'start', 'end', 'duration', 'key_indicator',
        'key_label', 'key_diatonic_root_label', 'key_diatonic_root']]
    
In [29]:
    
keys.to_csv('data/beatles/derived/all_keys.tsv', sep='\t', index=False, float_format='%.3f')
    
In [30]:
    
files = glob.glob('data/beatles/chordlab/The_Beatles/*/*.lab.pcs.tsv')
print('chord files count:', len(files))
files
    
    
chord files count: 180
    Out[30]:
['data/beatles/chordlab/The_Beatles/01_-_Please_Please_Me/01_-_I_Saw_Her_Standing_There.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/01_-_Please_Please_Me/02_-_Misery.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/01_-_Please_Please_Me/03_-_Anna_(Go_To_Him).lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/01_-_Please_Please_Me/04_-_Chains.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/01_-_Please_Please_Me/05_-_Boys.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/01_-_Please_Please_Me/06_-_Ask_Me_Why.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/01_-_Please_Please_Me/07_-_Please_Please_Me.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/01_-_Please_Please_Me/08_-_Love_Me_Do.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/01_-_Please_Please_Me/09_-_P._S._I_Love_You.lab.pcs.tsv',
 "data/beatles/chordlab/The_Beatles/01_-_Please_Please_Me/10_-_Baby_It's_You.lab.pcs.tsv",
 'data/beatles/chordlab/The_Beatles/01_-_Please_Please_Me/11_-_Do_You_Want_To_Know_A_Secret.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/01_-_Please_Please_Me/12_-_A_Taste_Of_Honey.lab.pcs.tsv',
 "data/beatles/chordlab/The_Beatles/01_-_Please_Please_Me/13_-_There's_A_Place.lab.pcs.tsv",
 'data/beatles/chordlab/The_Beatles/01_-_Please_Please_Me/14_-_Twist_And_Shout.lab.pcs.tsv',
 "data/beatles/chordlab/The_Beatles/02_-_With_the_Beatles/01_-_It_Won't_Be_Long.lab.pcs.tsv",
 "data/beatles/chordlab/The_Beatles/02_-_With_the_Beatles/02_-_All_I've_Got_To_Do.lab.pcs.tsv",
 'data/beatles/chordlab/The_Beatles/02_-_With_the_Beatles/03_-_All_My_Loving.lab.pcs.tsv',
 "data/beatles/chordlab/The_Beatles/02_-_With_the_Beatles/04_-_Don't_Bother_Me.lab.pcs.tsv",
 'data/beatles/chordlab/The_Beatles/02_-_With_the_Beatles/05_-_Little_Child.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/02_-_With_the_Beatles/06_-_Till_There_Was_You.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/02_-_With_the_Beatles/07_-_Please_Mister_Postman.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/02_-_With_the_Beatles/08_-_Roll_Over_Beethoven.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/02_-_With_the_Beatles/09_-_Hold_Me_Tight.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/02_-_With_the_Beatles/10_-_You_Really_Got_A_Hold_On_Me.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/02_-_With_the_Beatles/11_-_I_Wanna_Be_Your_Man.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/02_-_With_the_Beatles/12_-_Devil_In_Her_Heart.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/02_-_With_the_Beatles/13_-_Not_A_Second_Time.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/02_-_With_the_Beatles/14_-_Money.lab.pcs.tsv',
 "data/beatles/chordlab/The_Beatles/03_-_A_Hard_Day's_Night/01_-_A_Hard_Day's_Night.lab.pcs.tsv",
 "data/beatles/chordlab/The_Beatles/03_-_A_Hard_Day's_Night/02_-_I_Should_Have_Known_Better.lab.pcs.tsv",
 "data/beatles/chordlab/The_Beatles/03_-_A_Hard_Day's_Night/03_-_If_I_Fell.lab.pcs.tsv",
 "data/beatles/chordlab/The_Beatles/03_-_A_Hard_Day's_Night/04_-_I'm_Happy_Just_To_Dance_With_You.lab.pcs.tsv",
 "data/beatles/chordlab/The_Beatles/03_-_A_Hard_Day's_Night/05_-_And_I_Love_Her.lab.pcs.tsv",
 "data/beatles/chordlab/The_Beatles/03_-_A_Hard_Day's_Night/06_-_Tell_Me_Why.lab.pcs.tsv",
 "data/beatles/chordlab/The_Beatles/03_-_A_Hard_Day's_Night/07_-_Can't_Buy_Me_Love.lab.pcs.tsv",
 "data/beatles/chordlab/The_Beatles/03_-_A_Hard_Day's_Night/08_-_Any_Time_At_All.lab.pcs.tsv",
 "data/beatles/chordlab/The_Beatles/03_-_A_Hard_Day's_Night/09_-_I'll_Cry_Instead.lab.pcs.tsv",
 "data/beatles/chordlab/The_Beatles/03_-_A_Hard_Day's_Night/10_-_Things_We_Said_Today.lab.pcs.tsv",
 "data/beatles/chordlab/The_Beatles/03_-_A_Hard_Day's_Night/11_-_When_I_Get_Home.lab.pcs.tsv",
 "data/beatles/chordlab/The_Beatles/03_-_A_Hard_Day's_Night/12_-_You_Can't_Do_That.lab.pcs.tsv",
 "data/beatles/chordlab/The_Beatles/03_-_A_Hard_Day's_Night/13_-_I'll_Be_Back.lab.pcs.tsv",
 'data/beatles/chordlab/The_Beatles/04_-_Beatles_for_Sale/01_-_No_Reply.lab.pcs.tsv',
 "data/beatles/chordlab/The_Beatles/04_-_Beatles_for_Sale/02_-_I'm_a_Loser.lab.pcs.tsv",
 "data/beatles/chordlab/The_Beatles/04_-_Beatles_for_Sale/03_-_Baby's_In_Black.lab.pcs.tsv",
 'data/beatles/chordlab/The_Beatles/04_-_Beatles_for_Sale/04_-_Rock_and_Roll_Music.lab.pcs.tsv',
 "data/beatles/chordlab/The_Beatles/04_-_Beatles_for_Sale/05_-_I'll_Follow_the_Sun.lab.pcs.tsv",
 'data/beatles/chordlab/The_Beatles/04_-_Beatles_for_Sale/06_-_Mr._Moonlight.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/04_-_Beatles_for_Sale/07_-_Kansas_City-_Hey,_Hey,_Hey,_Hey.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/04_-_Beatles_for_Sale/08_-_Eight_Days_a_Week.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/04_-_Beatles_for_Sale/09_-_Words_of_Love.lab.pcs.tsv',
 "data/beatles/chordlab/The_Beatles/04_-_Beatles_for_Sale/10_-_Honey_Don't.lab.pcs.tsv",
 'data/beatles/chordlab/The_Beatles/04_-_Beatles_for_Sale/11_-_Every_Little_Thing.lab.pcs.tsv',
 "data/beatles/chordlab/The_Beatles/04_-_Beatles_for_Sale/12_-_I_Don't_Want_to_Spoil_the_Party.lab.pcs.tsv",
 "data/beatles/chordlab/The_Beatles/04_-_Beatles_for_Sale/13_-_What_You're_Doing.lab.pcs.tsv",
 "data/beatles/chordlab/The_Beatles/04_-_Beatles_for_Sale/14_-_Everybody's_Trying_to_Be_My_Baby.lab.pcs.tsv",
 'data/beatles/chordlab/The_Beatles/05_-_Help!/01_-_Help!.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/05_-_Help!/02_-_The_Night_Before.lab.pcs.tsv',
 "data/beatles/chordlab/The_Beatles/05_-_Help!/03_-_You've_Got_To_Hide_Your_Love_Away.lab.pcs.tsv",
 'data/beatles/chordlab/The_Beatles/05_-_Help!/04_-_I_Need_You.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/05_-_Help!/05_-_Another_Girl.lab.pcs.tsv',
 "data/beatles/chordlab/The_Beatles/05_-_Help!/06_-_You're_Going_To_Lose_That_Girl.lab.pcs.tsv",
 'data/beatles/chordlab/The_Beatles/05_-_Help!/07_-_Ticket_To_Ride.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/05_-_Help!/08_-_Act_Naturally.lab.pcs.tsv',
 "data/beatles/chordlab/The_Beatles/05_-_Help!/09_-_It's_Only_Love.lab.pcs.tsv",
 'data/beatles/chordlab/The_Beatles/05_-_Help!/10_-_You_Like_Me_Too_Much.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/05_-_Help!/11_-_Tell_Me_What_You_See.lab.pcs.tsv',
 "data/beatles/chordlab/The_Beatles/05_-_Help!/12_-_I've_Just_Seen_a_Face.lab.pcs.tsv",
 'data/beatles/chordlab/The_Beatles/05_-_Help!/13_-_Yesterday.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/05_-_Help!/14_-_Dizzy_Miss_Lizzy.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/06_-_Rubber_Soul/01_-_Drive_My_Car.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/06_-_Rubber_Soul/02_-_Norwegian_Wood_(This_Bird_Has_Flown).lab.pcs.tsv',
 "data/beatles/chordlab/The_Beatles/06_-_Rubber_Soul/03_-_You_Won't_See_Me.lab.pcs.tsv",
 'data/beatles/chordlab/The_Beatles/06_-_Rubber_Soul/04_-_Nowhere_Man.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/06_-_Rubber_Soul/05_-_Think_For_Yourself.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/06_-_Rubber_Soul/06_-_The_Word.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/06_-_Rubber_Soul/07_-_Michelle.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/06_-_Rubber_Soul/08_-_What_Goes_On.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/06_-_Rubber_Soul/09_-_Girl.lab.pcs.tsv',
 "data/beatles/chordlab/The_Beatles/06_-_Rubber_Soul/10_-_I'm_Looking_Through_You.lab.pcs.tsv",
 'data/beatles/chordlab/The_Beatles/06_-_Rubber_Soul/11_-_In_My_Life.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/06_-_Rubber_Soul/12_-_Wait.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/06_-_Rubber_Soul/13_-_If_I_Needed_Someone.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/06_-_Rubber_Soul/14_-_Run_For_Your_Life.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/07_-_Revolver/01_-_Taxman.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/07_-_Revolver/02_-_Eleanor_Rigby.lab.pcs.tsv',
 "data/beatles/chordlab/The_Beatles/07_-_Revolver/03_-_I'm_Only_Sleeping.lab.pcs.tsv",
 'data/beatles/chordlab/The_Beatles/07_-_Revolver/04_-_Love_You_To.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/07_-_Revolver/05_-_Here,_There_And_Everywhere.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/07_-_Revolver/06_-_Yellow_Submarine.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/07_-_Revolver/07_-_She_Said_She_Said.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/07_-_Revolver/08_-_Good_Day_Sunshine.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/07_-_Revolver/09_-_And_Your_Bird_Can_Sing.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/07_-_Revolver/10_-_For_No_One.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/07_-_Revolver/11_-_Doctor_Robert.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/07_-_Revolver/12_-_I_Want_To_Tell_You.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/07_-_Revolver/13_-_Got_To_Get_You_Into_My_Life.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/07_-_Revolver/14_-_Tomorrow_Never_Knows.lab.pcs.tsv',
 "data/beatles/chordlab/The_Beatles/08_-_Sgt._Pepper's_Lonely_Hearts_Club_Band/01_-_Sgt._Pepper's_Lonely_Hearts_Club_Band.lab.pcs.tsv",
 "data/beatles/chordlab/The_Beatles/08_-_Sgt._Pepper's_Lonely_Hearts_Club_Band/02_-_With_A_Little_Help_From_My_Friends.lab.pcs.tsv",
 "data/beatles/chordlab/The_Beatles/08_-_Sgt._Pepper's_Lonely_Hearts_Club_Band/03_-_Lucy_In_The_Sky_With_Diamonds.lab.pcs.tsv",
 "data/beatles/chordlab/The_Beatles/08_-_Sgt._Pepper's_Lonely_Hearts_Club_Band/04_-_Getting_Better.lab.pcs.tsv",
 "data/beatles/chordlab/The_Beatles/08_-_Sgt._Pepper's_Lonely_Hearts_Club_Band/05_-_Fixing_A_Hole.lab.pcs.tsv",
 "data/beatles/chordlab/The_Beatles/08_-_Sgt._Pepper's_Lonely_Hearts_Club_Band/06_-_She's_Leaving_Home.lab.pcs.tsv",
 "data/beatles/chordlab/The_Beatles/08_-_Sgt._Pepper's_Lonely_Hearts_Club_Band/07_-_Being_For_The_Benefit_Of_Mr._Kite!.lab.pcs.tsv",
 "data/beatles/chordlab/The_Beatles/08_-_Sgt._Pepper's_Lonely_Hearts_Club_Band/08_-_Within_You_Without_You.lab.pcs.tsv",
 "data/beatles/chordlab/The_Beatles/08_-_Sgt._Pepper's_Lonely_Hearts_Club_Band/09_-_When_I'm_Sixty-Four.lab.pcs.tsv",
 "data/beatles/chordlab/The_Beatles/08_-_Sgt._Pepper's_Lonely_Hearts_Club_Band/10_-_Lovely_Rita.lab.pcs.tsv",
 "data/beatles/chordlab/The_Beatles/08_-_Sgt._Pepper's_Lonely_Hearts_Club_Band/11_-_Good_Morning_Good_Morning.lab.pcs.tsv",
 "data/beatles/chordlab/The_Beatles/08_-_Sgt._Pepper's_Lonely_Hearts_Club_Band/12_-_Sgt._Pepper's_Lonely_Hearts_Club_Band_(Reprise).lab.pcs.tsv",
 "data/beatles/chordlab/The_Beatles/08_-_Sgt._Pepper's_Lonely_Hearts_Club_Band/13_-_A_Day_In_The_Life.lab.pcs.tsv",
 'data/beatles/chordlab/The_Beatles/09_-_Magical_Mystery_Tour/01_-_Magical_Mystery_Tour.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/09_-_Magical_Mystery_Tour/02_-_The_Fool_On_The_Hill.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/09_-_Magical_Mystery_Tour/03_-_Flying.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/09_-_Magical_Mystery_Tour/04_-_Blue_Jay_Way.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/09_-_Magical_Mystery_Tour/05_-_Your_Mother_Should_Know.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/09_-_Magical_Mystery_Tour/06_-_I_Am_The_Walrus.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/09_-_Magical_Mystery_Tour/07_-_Hello_Goodbye.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/09_-_Magical_Mystery_Tour/08_-_Strawberry_Fields_Forever.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/09_-_Magical_Mystery_Tour/09_-_Penny_Lane.lab.pcs.tsv',
 "data/beatles/chordlab/The_Beatles/09_-_Magical_Mystery_Tour/10_-_Baby_You're_A_Rich_Man.lab.pcs.tsv",
 'data/beatles/chordlab/The_Beatles/09_-_Magical_Mystery_Tour/11_-_All_You_Need_Is_Love.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/10CD1_-_The_Beatles/CD1_-_01_-_Back_in_the_USSR.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/10CD1_-_The_Beatles/CD1_-_02_-_Dear_Prudence.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/10CD1_-_The_Beatles/CD1_-_03_-_Glass_Onion.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/10CD1_-_The_Beatles/CD1_-_04_-_Ob-La-Di,_Ob-La-Da.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/10CD1_-_The_Beatles/CD1_-_05_-_Wild_Honey_Pie.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/10CD1_-_The_Beatles/CD1_-_06_-_The_Continuing_Story_of_Bungalow_Bill.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/10CD1_-_The_Beatles/CD1_-_07_-_While_My_Guitar_Gently_Weeps.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/10CD1_-_The_Beatles/CD1_-_08_-_Happiness_is_a_Warm_Gun.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/10CD1_-_The_Beatles/CD1_-_09_-_Martha_My_Dear.lab.pcs.tsv',
 "data/beatles/chordlab/The_Beatles/10CD1_-_The_Beatles/CD1_-_10_-_I'm_So_Tired.lab.pcs.tsv",
 'data/beatles/chordlab/The_Beatles/10CD1_-_The_Beatles/CD1_-_11_-_Black_Bird.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/10CD1_-_The_Beatles/CD1_-_12_-_Piggies.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/10CD1_-_The_Beatles/CD1_-_13_-_Rocky_Raccoon.lab.pcs.tsv',
 "data/beatles/chordlab/The_Beatles/10CD1_-_The_Beatles/CD1_-_14_-_Don't_Pass_Me_By.lab.pcs.tsv",
 "data/beatles/chordlab/The_Beatles/10CD1_-_The_Beatles/CD1_-_15_-_Why_Don't_We_Do_It_In_The_Road.lab.pcs.tsv",
 'data/beatles/chordlab/The_Beatles/10CD1_-_The_Beatles/CD1_-_16_-_I_Will.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/10CD1_-_The_Beatles/CD1_-_17_-_Julia.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/10CD2_-_The_Beatles/CD2_-_01_-_Birthday.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/10CD2_-_The_Beatles/CD2_-_02_-_Yer_Blues.lab.pcs.tsv',
 "data/beatles/chordlab/The_Beatles/10CD2_-_The_Beatles/CD2_-_03_-_Mother_Nature's_Son.lab.pcs.tsv",
 "data/beatles/chordlab/The_Beatles/10CD2_-_The_Beatles/CD2_-_04_-_Everybody's_Got_Something_To_Hide_Except_Me_and_My_Monkey.lab.pcs.tsv",
 'data/beatles/chordlab/The_Beatles/10CD2_-_The_Beatles/CD2_-_05_-_Sexy_Sadie.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/10CD2_-_The_Beatles/CD2_-_06_-_Helter_Skelter.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/10CD2_-_The_Beatles/CD2_-_07_-_Long_Long_Long.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/10CD2_-_The_Beatles/CD2_-_08_-_Revolution_1.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/10CD2_-_The_Beatles/CD2_-_09_-_Honey_Pie.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/10CD2_-_The_Beatles/CD2_-_10_-_Savoy_Truffle.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/10CD2_-_The_Beatles/CD2_-_11_-_Cry_Baby_Cry.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/10CD2_-_The_Beatles/CD2_-_12_-_Revolution_9.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/10CD2_-_The_Beatles/CD2_-_13_-_Good_Night.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/11_-_Abbey_Road/01_-_Come_Together.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/11_-_Abbey_Road/02_-_Something.lab.pcs.tsv',
 "data/beatles/chordlab/The_Beatles/11_-_Abbey_Road/03_-_Maxwell's_Silver_Hammer.lab.pcs.tsv",
 'data/beatles/chordlab/The_Beatles/11_-_Abbey_Road/04_-_Oh!_Darling.lab.pcs.tsv',
 "data/beatles/chordlab/The_Beatles/11_-_Abbey_Road/05_-_Octopus's_Garden.lab.pcs.tsv",
 'data/beatles/chordlab/The_Beatles/11_-_Abbey_Road/06_-_I_Want_You.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/11_-_Abbey_Road/07_-_Here_Comes_The_Sun.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/11_-_Abbey_Road/08_-_Because.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/11_-_Abbey_Road/09_-_You_Never_Give_Me_Your_Money.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/11_-_Abbey_Road/10_-_Sun_King.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/11_-_Abbey_Road/11_-_Mean_Mr_Mustard.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/11_-_Abbey_Road/12_-_Polythene_Pam.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/11_-_Abbey_Road/13_-_She_Came_In_Through_The_Bathroom_Window.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/11_-_Abbey_Road/14_-_Golden_Slumbers.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/11_-_Abbey_Road/15_-_Carry_That_Weight.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/11_-_Abbey_Road/16_-_The_End.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/11_-_Abbey_Road/17_-_Her_Majesty.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/12_-_Let_It_Be/01_-_Two_of_Us.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/12_-_Let_It_Be/02_-_Dig_a_Pony.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/12_-_Let_It_Be/03_-_Across_the_Universe.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/12_-_Let_It_Be/04_-_I_Me_Mine.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/12_-_Let_It_Be/05_-_Dig_It.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/12_-_Let_It_Be/06_-_Let_It_Be.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/12_-_Let_It_Be/07_-_Maggie_Mae.lab.pcs.tsv',
 "data/beatles/chordlab/The_Beatles/12_-_Let_It_Be/08_-_I've_Got_A_Feeling.lab.pcs.tsv",
 'data/beatles/chordlab/The_Beatles/12_-_Let_It_Be/09_-_One_After_909.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/12_-_Let_It_Be/10_-_The_Long_and_Winding_Road.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/12_-_Let_It_Be/11_-_For_You_Blue.lab.pcs.tsv',
 'data/beatles/chordlab/The_Beatles/12_-_Let_It_Be/12_-_Get_Back.lab.pcs.tsv']
In [31]:
    
def read_chord_file(path):
    return pd.read_csv(path, sep=' ', header=None, names=['start','end','chord_label'])
def read_chord_file_with_pitch_classes(path):
    return pd.read_csv(path, sep='\t')
    
In [32]:
    
read_chord_file_with_pitch_classes(files[0])
    
    Out[32]:
  
    
       
      start 
      end 
      label 
      root 
      bass 
      C 
      Db 
      D 
      Eb 
      E 
      F 
      Gb 
      G 
      Ab 
      A 
      Bb 
      B 
     
  
  
    
      0  
         0.000000 
         2.612267 
              N 
        0 
        0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
     
    
      1  
         2.612267 
        11.459070 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      2  
        11.459070 
        12.921927 
              A 
        9 
        9 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      3  
        12.921927 
        17.443474 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      4  
        17.443474 
        20.410362 
              B 
       11 
       11 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      5  
        20.410362 
        21.908049 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      6  
        21.908049 
        23.370907 
          E:7/3 
        4 
        8 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      7  
        23.370907 
        24.856984 
              A 
        9 
        9 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      8  
        24.856984 
        26.343061 
       A:min/b3 
        9 
        0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      9  
        26.343061 
        27.840748 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      10 
        27.840748 
        29.350045 
              B 
       11 
       11 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      11 
        29.350045 
        35.305963 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      12 
        35.305963 
        36.803650 
              A 
        9 
        9 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      13 
        36.803650 
        41.263102 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      14 
        41.263102 
        44.245646 
              B 
       11 
       11 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      15 
        44.245646 
        45.720113 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      16 
        45.720113 
        47.206190 
          E:7/3 
        4 
        8 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      17 
        47.206190 
        48.692267 
              A 
        9 
        9 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      18 
        48.692267 
        50.155124 
       A:min/b3 
        9 
        0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      19 
        50.155124 
        51.652811 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      20 
        51.652811 
        53.138888 
              B 
       11 
       11 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      21 
        53.138888 
        56.111043 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      22 
        56.111043 
        65.131995 
              A 
        9 
        9 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      23 
        65.131995 
        68.150589 
              B 
       11 
       11 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      24 
        68.150589 
        71.192403 
              A 
        9 
        9 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      25 
        71.192403 
        74.199387 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      26 
        74.199387 
        75.697074 
              A 
        9 
        9 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      27 
        75.697074 
        80.236575 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      28 
        80.236575 
        83.208730 
              B 
       11 
       11 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      29 
        83.208730 
        86.221693 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
     
    
      32 
        89.257528 
        90.720385 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      33 
        90.720385 
        92.157453 
              B 
       11 
       11 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      34 
        92.157453 
       104.106689 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      35 
       104.106689 
       107.125283 
              B 
       11 
       11 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      36 
       107.125283 
       110.178707 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      37 
       110.178707 
       113.124087 
              A 
        9 
        9 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      38 
       113.124087 
       114.613718 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      39 
       114.613718 
       116.099795 
              B 
       11 
       11 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      40 
       116.099795 
       118.944961 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      41 
       118.944961 
       128.046462 
              A 
        9 
        9 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      42 
       128.046462 
       131.053446 
              B 
       11 
       11 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      43 
       131.053446 
       134.037210 
              A 
        9 
        9 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      44 
       134.037210 
       137.044195 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      45 
       137.044195 
       138.475524 
              A 
        9 
        9 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      46 
       138.475524 
       143.058163 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      47 
       143.058163 
       146.041927 
              B 
       11 
       11 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      48 
       146.041927 
       147.551224 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      49 
       147.551224 
       149.060521 
          E:7/3 
        4 
        8 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      50 
       149.060521 
       150.511768 
              A 
        9 
        9 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      51 
       150.511768 
       152.021065 
       A:min/b3 
        9 
        0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      52 
       152.021065 
       153.530362 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      53 
       153.530362 
       155.062879 
              B 
       11 
       11 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      54 
       155.062879 
       159.532721 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      55 
       159.532721 
       161.065238 
              B 
       11 
       11 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      56 
       161.065238 
       165.581519 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      57 
       165.581519 
       167.114036 
              B 
       11 
       11 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      58 
       167.114036 
       168.646553 
              A 
        9 
        9 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      59 
       168.646553 
       169.737409 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      60 
       169.737409 
       171.687173 
            E:9 
        4 
        4 
       0 
       0 
       1 
       0 
       1 
       0 
       1 
       0 
       1 
       0 
       0 
       1 
     
    
      61 
       171.687173 
       175.804082 
              N 
        0 
        0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
     
  
62 rows × 17 columns
In [33]:
    
chords = pd.concat(add_track_id(read_chord_file_with_pitch_classes(file), track_id) for (track_id, file) in enumerate(files))
    
In [34]:
    
chords['duration'] = chords['end'] - chords['start']
    
In [35]:
    
chords = chords.reindex_axis(['track_id', 'start', 'end', 'duration', 'label', 'root', 'bass', 'C','Db','D','Eb','E','F','Gb','G','Ab','A','Bb','B'], axis=1)
chords
    
    Out[35]:
  
    
       
      track_id 
      start 
      end 
      duration 
      label 
      root 
      bass 
      C 
      Db 
      D 
      Eb 
      E 
      F 
      Gb 
      G 
      Ab 
      A 
      Bb 
      B 
     
  
  
    
      0  
         0 
         0.000000 
         2.612267 
        2.612267 
              N 
        0 
        0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
     
    
      1  
         0 
         2.612267 
        11.459070 
        8.846803 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      2  
         0 
        11.459070 
        12.921927 
        1.462857 
              A 
        9 
        9 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      3  
         0 
        12.921927 
        17.443474 
        4.521547 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      4  
         0 
        17.443474 
        20.410362 
        2.966888 
              B 
       11 
       11 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      5  
         0 
        20.410362 
        21.908049 
        1.497687 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      6  
         0 
        21.908049 
        23.370907 
        1.462858 
          E:7/3 
        4 
        8 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      7  
         0 
        23.370907 
        24.856984 
        1.486077 
              A 
        9 
        9 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      8  
         0 
        24.856984 
        26.343061 
        1.486077 
       A:min/b3 
        9 
        0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      9  
         0 
        26.343061 
        27.840748 
        1.497687 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      10 
         0 
        27.840748 
        29.350045 
        1.509297 
              B 
       11 
       11 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      11 
         0 
        29.350045 
        35.305963 
        5.955918 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      12 
         0 
        35.305963 
        36.803650 
        1.497687 
              A 
        9 
        9 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      13 
         0 
        36.803650 
        41.263102 
        4.459452 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      14 
         0 
        41.263102 
        44.245646 
        2.982544 
              B 
       11 
       11 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      15 
         0 
        44.245646 
        45.720113 
        1.474467 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      16 
         0 
        45.720113 
        47.206190 
        1.486077 
          E:7/3 
        4 
        8 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      17 
         0 
        47.206190 
        48.692267 
        1.486077 
              A 
        9 
        9 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      18 
         0 
        48.692267 
        50.155124 
        1.462857 
       A:min/b3 
        9 
        0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      19 
         0 
        50.155124 
        51.652811 
        1.497687 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      20 
         0 
        51.652811 
        53.138888 
        1.486077 
              B 
       11 
       11 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      21 
         0 
        53.138888 
        56.111043 
        2.972155 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      22 
         0 
        56.111043 
        65.131995 
        9.020952 
              A 
        9 
        9 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      23 
         0 
        65.131995 
        68.150589 
        3.018594 
              B 
       11 
       11 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      24 
         0 
        68.150589 
        71.192403 
        3.041814 
              A 
        9 
        9 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      25 
         0 
        71.192403 
        74.199387 
        3.006984 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      26 
         0 
        74.199387 
        75.697074 
        1.497687 
              A 
        9 
        9 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      27 
         0 
        75.697074 
        80.236575 
        4.539501 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      28 
         0 
        80.236575 
        83.208730 
        2.972155 
              B 
       11 
       11 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      29 
         0 
        83.208730 
        86.221693 
        3.012963 
              E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
     
    
      54 
       179 
       120.053537 
       122.004013 
        1.950476 
              D 
        2 
        2 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
     
    
      55 
       179 
       122.004013 
       122.967641 
        0.963628 
              A 
        9 
        9 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      56 
       179 
       122.967641 
       123.942879 
        0.975238 
            G/2 
        7 
        9 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       1 
       0 
       1 
     
    
      57 
       179 
       123.942879 
       127.843832 
        3.900953 
            A:7 
        9 
        9 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
     
    
      58 
       179 
       127.843832 
       129.805918 
        1.962086 
              D 
        2 
        2 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
     
    
      59 
       179 
       129.805918 
       130.792766 
        0.986848 
              A 
        9 
        9 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      60 
       179 
       130.792766 
       131.245555 
        0.452789 
            G/2 
        7 
        9 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       1 
       0 
       1 
     
    
      61 
       179 
       131.245555 
       131.756394 
        0.510839 
            D/5 
        2 
        9 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
     
    
      62 
       179 
       131.756394 
       135.622517 
        3.866123 
            A:7 
        9 
        9 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
     
    
      63 
       179 
       135.622517 
       137.549773 
        1.927256 
              D 
        2 
        2 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
     
    
      64 
       179 
       137.549773 
       139.477029 
        1.927256 
              A 
        9 
        9 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      65 
       179 
       139.477029 
       143.308321 
        3.831292 
              A 
        9 
        9 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      66 
       179 
       143.308321 
       145.258798 
        1.950477 
              D 
        2 
        2 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
     
    
      67 
       179 
       145.258798 
       146.245646 
        0.986848 
              A 
        9 
        9 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      68 
       179 
       146.245646 
       146.733265 
        0.487619 
            G/2 
        7 
        9 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       1 
       0 
       1 
     
    
      69 
       179 
       146.733265 
       147.244104 
        0.510839 
            D/5 
        2 
        9 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
     
    
      70 
       179 
       147.244104 
       151.110226 
        3.866122 
              A 
        9 
        9 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      71 
       179 
       151.110226 
       153.060702 
        1.950476 
              D 
        2 
        2 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
     
    
      72 
       179 
       153.060702 
       154.024331 
        0.963629 
              A 
        9 
        9 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      73 
       179 
       154.024331 
       154.523560 
        0.499229 
            G/2 
        7 
        9 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       1 
       0 
       1 
     
    
      74 
       179 
       154.523560 
       155.022789 
        0.499229 
            D/5 
        2 
        9 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
     
    
      75 
       179 
       155.022789 
       158.854081 
        3.831292 
            A:7 
        9 
        9 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
     
    
      76 
       179 
       158.854081 
       160.781337 
        1.927256 
              D 
        2 
        2 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
     
    
      77 
       179 
       160.781337 
       161.489546 
        0.708209 
              A 
        9 
        9 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      78 
       179 
       161.489546 
       162.174535 
        0.684989 
            G/2 
        7 
        9 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       1 
       0 
       1 
     
    
      79 
       179 
       162.174535 
       162.696984 
        0.522449 
            D/5 
        2 
        9 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
     
    
      80 
       179 
       162.696984 
       166.423786 
        3.726802 
            A:7 
        9 
        9 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
     
    
      81 
       179 
       166.423786 
       168.192617 
        1.768831 
              D 
        2 
        2 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
     
    
      82 
       179 
       168.192617 
       174.281557 
        6.088940 
            D:7 
        2 
        2 
       1 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
     
    
      83 
       179 
       174.281557 
       186.984490 
       12.702933 
              N 
        0 
        0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
     
  
14621 rows × 19 columns
In [36]:
    
# all tracks start at 0.0 time
assert (chords.groupby('track_id').first()['start'] == 0).all()
    
In [37]:
    
chords_keys_end_diff = chords.groupby('track_id').last()[['end']].rename(columns={'end': 'chords_end'}).join(keys.groupby('track_id').last()[['end']].rename(columns={'end': 'keys_end'}))
chords_keys_end_diff['diff'] = chords_keys_end_diff['chords_end'] - chords_keys_end_diff['keys_end']
    
In [38]:
    
chords_keys_end_diff['diff'].describe()
    
    Out[38]:
count    180.000000
mean       0.005191
std        0.035198
min       -0.133061
25%        0.005714
50%        0.014663
75%        0.020469
max        0.039245
Name: diff, dtype: float64
Track lengths are not precisely aligned between chords and keys dataset. Roughly they're are alrigth, however.
In [39]:
    
chords_keys_end_diff
    
    Out[39]:
  
    
       
      chords_end 
      keys_end 
      diff 
     
    
      track_id 
       
       
       
     
  
  
    
      0   
       175.804082 
       175.800 
       0.004082 
     
    
      1   
       110.184490 
       110.160 
       0.024490 
     
    
      2   
       177.580408 
       177.573 
       0.007408 
     
    
      3   
       146.494694 
       146.493 
       0.001694 
     
    
      4   
       147.513469 
       147.507 
       0.006469 
     
    
      5   
       147.774694 
       147.760 
       0.014694 
     
    
      6   
       123.376327 
       123.373 
       0.003327 
     
    
      7   
       142.759184 
       142.760 
      -0.000816 
     
    
      8   
       125.753469 
       125.733 
       0.020469 
     
    
      9   
       158.066939 
       158.067 
      -0.000061 
     
    
      10  
       119.353469 
       119.333 
       0.020469 
     
    
      11  
       125.152653 
       125.133 
       0.019653 
     
    
      12  
       112.875102 
       112.867 
       0.008102 
     
    
      13  
       153.155918 
       153.267 
      -0.111082 
     
    
      14  
       133.746939 
       133.733 
       0.013939 
     
    
      15  
       124.551837 
       124.533 
       0.018837 
     
    
      16  
       129.567347 
       129.560 
       0.007347 
     
    
      17  
       149.394286 
       149.373 
       0.021286 
     
    
      18  
       108.016327 
       108.000 
       0.016327 
     
    
      19  
       136.751020 
       136.733 
       0.018020 
     
    
      20  
       156.734694 
       156.733 
       0.001694 
     
    
      21  
       167.627755 
       167.627 
       0.000755 
     
    
      22  
       152.581224 
       152.573 
       0.008224 
     
    
      23  
       182.909388 
       182.893 
       0.016388 
     
    
      24  
       118.987755 
       118.973 
       0.014755 
     
    
      25  
       147.670204 
       147.667 
       0.003204 
     
    
      26  
       128.339592 
       128.333 
       0.006592 
     
    
      27  
       167.444898 
       167.560 
      -0.115102 
     
    
      28  
       152.555102 
       152.520 
       0.035102 
     
    
      29  
       164.101224 
       164.080 
       0.021224 
     
    
      ... 
      ... 
      ... 
      ... 
     
    
      150 
       191.686531 
       191.800 
      -0.113469 
     
    
      151 
       260.649796 
       260.627 
       0.022796 
     
    
      152 
       183.013878 
       183.000 
       0.013878 
     
    
      153 
       207.281633 
       207.267 
       0.014633 
     
    
      154 
       206.706939 
       206.707 
      -0.000061 
     
    
      155 
       171.180408 
       171.160 
       0.020408 
     
    
      156 
       467.173878 
       467.173 
       0.000878 
     
    
      157 
       185.573878 
       185.560 
       0.013878 
     
    
      158 
       165.537959 
       165.533 
       0.004959 
     
    
      159 
       242.416327 
       242.400 
       0.016327 
     
    
      160 
       146.311837 
       146.307 
       0.004837 
     
    
      161 
        66.298776 
        66.293 
       0.005776 
     
    
      162 
        72.751020 
        72.733 
       0.018020 
     
    
      163 
       117.733878 
       117.733 
       0.000878 
     
    
      164 
        91.585306 
        91.573 
       0.012306 
     
    
      165 
        96.888163 
        96.867 
       0.021163 
     
    
      166 
       139.833469 
       139.827 
       0.006469 
     
    
      167 
        23.144490 
        23.267 
      -0.122510 
     
    
      168 
       216.685714 
       216.667 
       0.018714 
     
    
      169 
       234.814694 
       234.800 
       0.014694 
     
    
      170 
       228.571429 
       228.560 
       0.011429 
     
    
      171 
       145.737143 
       145.733 
       0.004143 
     
    
      172 
        50.024490 
        50.000 
       0.024490 
     
    
      173 
       243.330612 
       243.307 
       0.023612 
     
    
      174 
        40.620408 
        40.600 
       0.020408 
     
    
      175 
       217.965714 
       217.960 
       0.005714 
     
    
      176 
       175.516735 
       175.507 
       0.009735 
     
    
      177 
       217.887347 
       217.867 
       0.020347 
     
    
      178 
       152.737959 
       152.733 
       0.004959 
     
    
      179 
       186.984490 
       187.093 
      -0.108510 
     
  
180 rows × 3 columns
In [40]:
    
chords_keys_end_diff['diff'].hist(bins=50);
    
    
 
In [41]:
    
chords.head()
    
    Out[41]:
  
    
       
      track_id 
      start 
      end 
      duration 
      label 
      root 
      bass 
      C 
      Db 
      D 
      Eb 
      E 
      F 
      Gb 
      G 
      Ab 
      A 
      Bb 
      B 
     
  
  
    
      0 
       0 
        0.000000 
        2.612267 
       2.612267 
       N 
        0 
        0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
     
    
      1 
       0 
        2.612267 
       11.459070 
       8.846803 
       E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      2 
       0 
       11.459070 
       12.921927 
       1.462857 
       A 
        9 
        9 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      3 
       0 
       12.921927 
       17.443474 
       4.521547 
       E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      4 
       0 
       17.443474 
       20.410362 
       2.966888 
       B 
       11 
       11 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
  
In [42]:
    
keys.head()
    
    Out[42]:
  
    
       
      track_id 
      start 
      end 
      duration 
      key_indicator 
      key_label 
      key_diatonic_root_label 
      key_diatonic_root 
     
  
  
    
      0 
       0 
         0.000 
         1.035 
         1.035 
       Silence 
       NaN 
       None 
      NaN 
     
    
      1 
       0 
         1.035 
       171.880 
       170.845 
           Key 
         E 
          E 
        4 
     
    
      2 
       0 
       171.880 
       175.800 
         3.920 
       Silence 
       NaN 
       None 
      NaN 
     
    
      0 
       1 
         0.000 
         0.395 
         0.395 
       Silence 
       NaN 
       None 
      NaN 
     
    
      1 
       1 
         0.395 
       105.685 
       105.290 
           Key 
         C 
          C 
        0 
     
  
Let's try to merge keys to chords from a single example track.
In [43]:
    
track_keys = keys[keys['track_id'] == 109]
track_keys
    
    Out[43]:
  
    
       
      track_id 
      start 
      end 
      duration 
      key_indicator 
      key_label 
      key_diatonic_root_label 
      key_diatonic_root 
     
  
  
    
      0 
       109 
         0.000 
       135.830 
       135.830 
           Key 
         G 
          G 
        7 
     
    
      1 
       109 
       135.830 
       198.310 
        62.480 
           Key 
         E 
          E 
        4 
     
    
      2 
       109 
       198.310 
       259.226 
        60.916 
           Key 
         G 
          G 
        7 
     
    
      3 
       109 
       259.226 
       333.907 
        74.681 
           Key 
         E 
          E 
        4 
     
    
      4 
       109 
       333.907 
       333.907 
         0.000 
       Silence 
       NaN 
       None 
      NaN 
     
  
In [44]:
    
track_chords = chords[chords['track_id'] == 109]
track_chords
    
    Out[44]:
  
    
       
      track_id 
      start 
      end 
      duration 
      label 
      root 
      bass 
      C 
      Db 
      D 
      Eb 
      E 
      F 
      Gb 
      G 
      Ab 
      A 
      Bb 
      B 
     
  
  
    
      0   
       109 
         0.000000 
         1.914761 
        1.914761 
                   G 
        7 
        7 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      1   
       109 
         1.914761 
         3.369980 
        1.455219 
               B:min 
       11 
       11 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      2   
       109 
         3.369980 
         6.519569 
        3.149589 
              E:min7 
        4 
        4 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      3   
       109 
         6.519569 
        12.848047 
        6.328478 
                   C 
        0 
        0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
     
    
      4   
       109 
        12.848047 
        14.425963 
        1.577916 
                   G 
        7 
        7 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      5   
       109 
        14.425963 
        15.923650 
        1.497687 
             B:min/5 
       11 
        6 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      6   
       109 
        15.923650 
        17.490997 
        1.567347 
              E:min7 
        4 
        4 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      7   
       109 
        17.490997 
        18.988684 
        1.497687 
           E:min7/b7 
        4 
        2 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      8   
       109 
        18.988684 
        20.556031 
        1.567347 
                   C 
        0 
        0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
     
    
      9   
       109 
        20.556031 
        22.123378 
        1.567347 
             E:min/5 
        4 
       11 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      10  
       109 
        22.123378 
        25.223242 
        3.099864 
               A:min 
        9 
        9 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      11  
       109 
        25.223242 
        26.744149 
        1.520907 
                   G 
        7 
        7 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      12  
       109 
        26.744149 
        28.369546 
        1.625397 
               B:min 
       11 
       11 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      13  
       109 
        28.369546 
        29.925283 
        1.555737 
              E:min7 
        4 
        4 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      14  
       109 
        29.925283 
        31.446190 
        1.520907 
           E:min7/b7 
        4 
        2 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      15  
       109 
        31.446190 
        33.059977 
        1.613787 
                   C 
        0 
        0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
     
    
      16  
       109 
        33.059977 
        34.592494 
        1.532517 
                   F 
        5 
        5 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      17  
       109 
        34.592494 
        36.148231 
        1.555737 
               E:min 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      18  
       109 
        36.148231 
        37.680748 
        1.532517 
           E:min7/b7 
        4 
        2 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      19  
       109 
        37.680748 
        39.294535 
        1.613787 
                   C 
        0 
        0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
     
    
      20  
       109 
        39.294535 
        40.815442 
        1.520907 
                   F 
        5 
        5 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      21  
       109 
        40.815442 
        42.382789 
        1.567347 
               E:min 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      22  
       109 
        42.382789 
        43.543786 
        1.160997 
                   C 
        0 
        0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
     
    
      23  
       109 
        43.543786 
        43.950136 
        0.406350 
                   D 
        2 
        2 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
     
    
      24  
       109 
        43.950136 
        45.517482 
        1.567346 
                   G 
        7 
        7 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      25  
       109 
        45.517482 
        47.003560 
        1.486078 
             B:min/5 
       11 
        6 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      26  
       109 
        47.003560 
        50.033764 
        3.030204 
           E:min7/b7 
        4 
        2 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      27  
       109 
        50.033764 
        51.659160 
        1.625396 
                   C 
        0 
        0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
     
    
      28  
       109 
        51.659160 
        53.145238 
        1.486078 
             E:min/5 
        4 
       11 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      29  
       109 
        53.145238 
        56.349591 
        3.204353 
               A:min 
        9 
        9 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
     
    
      90  
       109 
       198.339614 
       199.872131 
        1.532517 
                   G 
        7 
        7 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      91  
       109 
       199.872131 
       201.323378 
        1.451247 
             B:min/5 
       11 
        6 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      92  
       109 
       201.323378 
       202.855895 
        1.532517 
              E:min7 
        4 
        4 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      93  
       109 
       202.855895 
       204.318752 
        1.462857 
           E:min7/b7 
        4 
        2 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      94  
       109 
       204.318752 
       205.781609 
        1.462857 
                   C 
        0 
        0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
     
    
      95  
       109 
       205.781609 
       207.209637 
        1.428028 
             E:min/5 
        4 
       11 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      96  
       109 
       207.209637 
       209.136893 
        1.927256 
               A:min 
        9 
        9 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      97  
       109 
       209.136893 
       210.216621 
        1.079728 
            F#:hdim7 
        6 
        6 
       1 
       0 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
     
    
      98  
       109 
       210.216621 
       211.656258 
        1.439637 
                   G 
        7 
        7 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      99  
       109 
       211.656258 
       213.107505 
        1.451247 
               B:min 
       11 
       11 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      100 
       109 
       213.107505 
       214.616802 
        1.509297 
              E:min7 
        4 
        4 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      101 
       109 
       214.616802 
       216.068049 
        1.451247 
           E:min7/b7 
        4 
        2 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      102 
       109 
       216.068049 
       217.554126 
        1.486077 
                   C 
        0 
        0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
     
    
      103 
       109 
       217.554126 
       218.993764 
        1.439638 
                   F 
        5 
        5 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      104 
       109 
       218.993764 
       220.491451 
        1.497687 
               E:min 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      105 
       109 
       220.491451 
       221.942698 
        1.451247 
           E:min7/b7 
        4 
        2 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      106 
       109 
       221.942698 
       224.856802 
        2.914104 
                   C 
        0 
        0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
     
    
      107 
       109 
       224.856802 
       226.354489 
        1.497687 
                   C 
        0 
        0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
     
    
      108 
       109 
       226.354489 
       227.782517 
        1.428028 
         F#:(1,4,b5) 
        6 
        6 
       1 
       0 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      109 
       109 
       227.782517 
       229.245374 
        1.462857 
            E:min/b3 
        4 
        7 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      110 
       109 
       229.245374 
       230.719841 
        1.474467 
            A:min(2) 
        9 
        9 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       1 
     
    
      111 
       109 
       230.719841 
       232.136258 
        1.416417 
        E:min(*b3)/5 
        4 
       11 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      112 
       109 
       232.136258 
       233.564285 
        1.428027 
          C:maj7(*5) 
        0 
        0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       0 
       0 
       1 
     
    
      113 
       109 
       233.564285 
       234.992312 
        1.428027 
       E:min7(*5)/b7 
        4 
        2 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
     
    
      114 
       109 
       234.992312 
       241.336491 
        6.344179 
        E:(1,2,5,b6) 
        4 
        4 
       1 
       0 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      115 
       109 
       241.336491 
       259.316098 
       17.979607 
                   N 
        0 
        0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
     
    
      116 
       109 
       259.316098 
       261.154269 
        1.838171 
               E:(1) 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
     
    
      117 
       109 
       261.154269 
       303.623671 
       42.469402 
                   E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      118 
       109 
       303.623671 
       306.859617 
        3.235946 
                   N 
        0 
        0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
     
    
      119 
       109 
       306.859617 
       333.792653 
       26.933036 
                   N 
        0 
        0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
     
  
120 rows × 19 columns
In [27]:
    
def plot_time_intervals(starts, ends, **kwargs):
    x_lines = [el for (s, e) in zip(starts, ends) for el in (s, e, None)]
    y_lines = [el for i in range(len(starts)) for el in (i, i, None)]
    plot(x_lines, y_lines, **kwargs)
def plot_chords_and_keys(track_chords, track_keys):
    plot_time_intervals(track_chords['start'], track_chords['end'], label='chord segments')
    plot_time_intervals(track_keys['start'], track_keys['end'], label='key segments')
    title('chord and key segments in time')
    legend(loc='center right')
    xlabel('time (sec)')
    ylabel('segment index')
    
In [ ]:
    
plot_chords_and_keys(track_chords, track_keys);
    
In [46]:
    
def time_range(df, start, end):
    return df[(df['start'] >= start) & (df['end'] <= end)]
plot_chords_and_keys(time_range(track_chords, 120, 220), time_range(track_keys, 120, 220))
    
    
 
In [47]:
    
def find_key(keys, track_id, start):
    "Finds the first key segment within a track that the chord segment spans."
    possible_keys = keys.query('(start <= '+str(start)+') & (track_id == '+str(track_id)+')')
    if len(possible_keys) > 0:
        row = possible_keys.iloc[-1]
#         return pd.Series([start, ['start']])
        return row
find_key(keys, 109, 198.0)
    
    Out[47]:
track_id                      109
start                      135.83
end                        198.31
duration                    62.48
key_indicator                 Key
key_label                       E
key_diatonic_root_label         E
key_diatonic_root               4
Name: 1, dtype: object
In [48]:
    
track_chords['start'].apply(lambda start: find_key(track_keys, 109, start)[['key_diatonic_root_label', 'key_diatonic_root']])
    
    Out[48]:
  
    
       
      key_diatonic_root_label 
      key_diatonic_root 
     
  
  
    
      0   
       G 
       7 
     
    
      1   
       G 
       7 
     
    
      2   
       G 
       7 
     
    
      3   
       G 
       7 
     
    
      4   
       G 
       7 
     
    
      5   
       G 
       7 
     
    
      6   
       G 
       7 
     
    
      7   
       G 
       7 
     
    
      8   
       G 
       7 
     
    
      9   
       G 
       7 
     
    
      10  
       G 
       7 
     
    
      11  
       G 
       7 
     
    
      12  
       G 
       7 
     
    
      13  
       G 
       7 
     
    
      14  
       G 
       7 
     
    
      15  
       G 
       7 
     
    
      16  
       G 
       7 
     
    
      17  
       G 
       7 
     
    
      18  
       G 
       7 
     
    
      19  
       G 
       7 
     
    
      20  
       G 
       7 
     
    
      21  
       G 
       7 
     
    
      22  
       G 
       7 
     
    
      23  
       G 
       7 
     
    
      24  
       G 
       7 
     
    
      25  
       G 
       7 
     
    
      26  
       G 
       7 
     
    
      27  
       G 
       7 
     
    
      28  
       G 
       7 
     
    
      29  
       G 
       7 
     
    
      ... 
      ... 
      ... 
     
    
      90  
       G 
       7 
     
    
      91  
       G 
       7 
     
    
      92  
       G 
       7 
     
    
      93  
       G 
       7 
     
    
      94  
       G 
       7 
     
    
      95  
       G 
       7 
     
    
      96  
       G 
       7 
     
    
      97  
       G 
       7 
     
    
      98  
       G 
       7 
     
    
      99  
       G 
       7 
     
    
      100 
       G 
       7 
     
    
      101 
       G 
       7 
     
    
      102 
       G 
       7 
     
    
      103 
       G 
       7 
     
    
      104 
       G 
       7 
     
    
      105 
       G 
       7 
     
    
      106 
       G 
       7 
     
    
      107 
       G 
       7 
     
    
      108 
       G 
       7 
     
    
      109 
       G 
       7 
     
    
      110 
       G 
       7 
     
    
      111 
       G 
       7 
     
    
      112 
       G 
       7 
     
    
      113 
       G 
       7 
     
    
      114 
       G 
       7 
     
    
      115 
       G 
       7 
     
    
      116 
       E 
       4 
     
    
      117 
       E 
       4 
     
    
      118 
       E 
       4 
     
    
      119 
       E 
       4 
     
  
120 rows × 2 columns
In [49]:
    
track_keys
    
    Out[49]:
  
    
       
      track_id 
      start 
      end 
      duration 
      key_indicator 
      key_label 
      key_diatonic_root_label 
      key_diatonic_root 
     
  
  
    
      0 
       109 
         0.000 
       135.830 
       135.830 
           Key 
         G 
          G 
        7 
     
    
      1 
       109 
       135.830 
       198.310 
        62.480 
           Key 
         E 
          E 
        4 
     
    
      2 
       109 
       198.310 
       259.226 
        60.916 
           Key 
         G 
          G 
        7 
     
    
      3 
       109 
       259.226 
       333.907 
        74.681 
           Key 
         E 
          E 
        4 
     
    
      4 
       109 
       333.907 
       333.907 
         0.000 
       Silence 
       NaN 
       None 
      NaN 
     
  
In [50]:
    
track_chords
    
    Out[50]:
  
    
       
      track_id 
      start 
      end 
      duration 
      label 
      root 
      bass 
      C 
      Db 
      D 
      Eb 
      E 
      F 
      Gb 
      G 
      Ab 
      A 
      Bb 
      B 
     
  
  
    
      0   
       109 
         0.000000 
         1.914761 
        1.914761 
                   G 
        7 
        7 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      1   
       109 
         1.914761 
         3.369980 
        1.455219 
               B:min 
       11 
       11 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      2   
       109 
         3.369980 
         6.519569 
        3.149589 
              E:min7 
        4 
        4 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      3   
       109 
         6.519569 
        12.848047 
        6.328478 
                   C 
        0 
        0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
     
    
      4   
       109 
        12.848047 
        14.425963 
        1.577916 
                   G 
        7 
        7 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      5   
       109 
        14.425963 
        15.923650 
        1.497687 
             B:min/5 
       11 
        6 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      6   
       109 
        15.923650 
        17.490997 
        1.567347 
              E:min7 
        4 
        4 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      7   
       109 
        17.490997 
        18.988684 
        1.497687 
           E:min7/b7 
        4 
        2 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      8   
       109 
        18.988684 
        20.556031 
        1.567347 
                   C 
        0 
        0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
     
    
      9   
       109 
        20.556031 
        22.123378 
        1.567347 
             E:min/5 
        4 
       11 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      10  
       109 
        22.123378 
        25.223242 
        3.099864 
               A:min 
        9 
        9 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      11  
       109 
        25.223242 
        26.744149 
        1.520907 
                   G 
        7 
        7 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      12  
       109 
        26.744149 
        28.369546 
        1.625397 
               B:min 
       11 
       11 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      13  
       109 
        28.369546 
        29.925283 
        1.555737 
              E:min7 
        4 
        4 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      14  
       109 
        29.925283 
        31.446190 
        1.520907 
           E:min7/b7 
        4 
        2 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      15  
       109 
        31.446190 
        33.059977 
        1.613787 
                   C 
        0 
        0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
     
    
      16  
       109 
        33.059977 
        34.592494 
        1.532517 
                   F 
        5 
        5 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      17  
       109 
        34.592494 
        36.148231 
        1.555737 
               E:min 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      18  
       109 
        36.148231 
        37.680748 
        1.532517 
           E:min7/b7 
        4 
        2 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      19  
       109 
        37.680748 
        39.294535 
        1.613787 
                   C 
        0 
        0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
     
    
      20  
       109 
        39.294535 
        40.815442 
        1.520907 
                   F 
        5 
        5 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      21  
       109 
        40.815442 
        42.382789 
        1.567347 
               E:min 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      22  
       109 
        42.382789 
        43.543786 
        1.160997 
                   C 
        0 
        0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
     
    
      23  
       109 
        43.543786 
        43.950136 
        0.406350 
                   D 
        2 
        2 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
     
    
      24  
       109 
        43.950136 
        45.517482 
        1.567346 
                   G 
        7 
        7 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      25  
       109 
        45.517482 
        47.003560 
        1.486078 
             B:min/5 
       11 
        6 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      26  
       109 
        47.003560 
        50.033764 
        3.030204 
           E:min7/b7 
        4 
        2 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      27  
       109 
        50.033764 
        51.659160 
        1.625396 
                   C 
        0 
        0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
     
    
      28  
       109 
        51.659160 
        53.145238 
        1.486078 
             E:min/5 
        4 
       11 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      29  
       109 
        53.145238 
        56.349591 
        3.204353 
               A:min 
        9 
        9 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
     
    
      90  
       109 
       198.339614 
       199.872131 
        1.532517 
                   G 
        7 
        7 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      91  
       109 
       199.872131 
       201.323378 
        1.451247 
             B:min/5 
       11 
        6 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      92  
       109 
       201.323378 
       202.855895 
        1.532517 
              E:min7 
        4 
        4 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      93  
       109 
       202.855895 
       204.318752 
        1.462857 
           E:min7/b7 
        4 
        2 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      94  
       109 
       204.318752 
       205.781609 
        1.462857 
                   C 
        0 
        0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
     
    
      95  
       109 
       205.781609 
       207.209637 
        1.428028 
             E:min/5 
        4 
       11 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      96  
       109 
       207.209637 
       209.136893 
        1.927256 
               A:min 
        9 
        9 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      97  
       109 
       209.136893 
       210.216621 
        1.079728 
            F#:hdim7 
        6 
        6 
       1 
       0 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
     
    
      98  
       109 
       210.216621 
       211.656258 
        1.439637 
                   G 
        7 
        7 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      99  
       109 
       211.656258 
       213.107505 
        1.451247 
               B:min 
       11 
       11 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      100 
       109 
       213.107505 
       214.616802 
        1.509297 
              E:min7 
        4 
        4 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      101 
       109 
       214.616802 
       216.068049 
        1.451247 
           E:min7/b7 
        4 
        2 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      102 
       109 
       216.068049 
       217.554126 
        1.486077 
                   C 
        0 
        0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
     
    
      103 
       109 
       217.554126 
       218.993764 
        1.439638 
                   F 
        5 
        5 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      104 
       109 
       218.993764 
       220.491451 
        1.497687 
               E:min 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      105 
       109 
       220.491451 
       221.942698 
        1.451247 
           E:min7/b7 
        4 
        2 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      106 
       109 
       221.942698 
       224.856802 
        2.914104 
                   C 
        0 
        0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
     
    
      107 
       109 
       224.856802 
       226.354489 
        1.497687 
                   C 
        0 
        0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
     
    
      108 
       109 
       226.354489 
       227.782517 
        1.428028 
         F#:(1,4,b5) 
        6 
        6 
       1 
       0 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      109 
       109 
       227.782517 
       229.245374 
        1.462857 
            E:min/b3 
        4 
        7 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      110 
       109 
       229.245374 
       230.719841 
        1.474467 
            A:min(2) 
        9 
        9 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       1 
     
    
      111 
       109 
       230.719841 
       232.136258 
        1.416417 
        E:min(*b3)/5 
        4 
       11 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
     
    
      112 
       109 
       232.136258 
       233.564285 
        1.428027 
          C:maj7(*5) 
        0 
        0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       0 
       0 
       1 
     
    
      113 
       109 
       233.564285 
       234.992312 
        1.428027 
       E:min7(*5)/b7 
        4 
        2 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
     
    
      114 
       109 
       234.992312 
       241.336491 
        6.344179 
        E:(1,2,5,b6) 
        4 
        4 
       1 
       0 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      115 
       109 
       241.336491 
       259.316098 
       17.979607 
                   N 
        0 
        0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
     
    
      116 
       109 
       259.316098 
       261.154269 
        1.838171 
               E:(1) 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
     
    
      117 
       109 
       261.154269 
       303.623671 
       42.469402 
                   E 
        4 
        4 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      118 
       109 
       303.623671 
       306.859617 
        3.235946 
                   N 
        0 
        0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
     
    
      119 
       109 
       306.859617 
       333.792653 
       26.933036 
                   N 
        0 
        0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
     
  
120 rows × 19 columns
In [51]:
    
chord = chords.iloc[0]
keys_for_track = keys[keys['track_id'] == chord.track_id]
keys_for_track[keys_for_track['start'] >= chord['start']]
    
    Out[51]:
  
    
       
      track_id 
      start 
      end 
      duration 
      key_indicator 
      key_label 
      key_diatonic_root_label 
      key_diatonic_root 
     
  
  
    
      0 
       0 
         0.000 
         1.035 
         1.035 
       Silence 
       NaN 
       None 
      NaN 
     
    
      1 
       0 
         1.035 
       171.880 
       170.845 
           Key 
         E 
          E 
        4 
     
    
      2 
       0 
       171.880 
       175.800 
         3.920 
       Silence 
       NaN 
       None 
      NaN 
     
  
In [52]:
    
# this is very inefficient, it takes many seconds
# TODO: optimize this!
key_labels_for_chords = chords[['track_id','start']].apply(
    lambda row: find_key(keys, row['track_id'], row['start']),
    axis=1)[['key_diatonic_root_label', 'key_diatonic_root']]
    
In [53]:
    
key_labels_for_chords[:10]
    
    Out[53]:
  
    
       
      key_diatonic_root_label 
      key_diatonic_root 
     
  
  
    
      0 
       None 
      NaN 
     
    
      1 
          E 
        4 
     
    
      2 
          E 
        4 
     
    
      3 
          E 
        4 
     
    
      4 
          E 
        4 
     
    
      5 
          E 
        4 
     
    
      6 
          E 
        4 
     
    
      7 
          E 
        4 
     
    
      8 
          E 
        4 
     
    
      9 
          E 
        4 
     
  
Append the computed key for each chord segment.
In [54]:
    
for col in ('key_diatonic_root_label', 'key_diatonic_root'):
    chords[col] = key_labels_for_chords[col]
    
In [55]:
    
chords
    
    Out[55]:
  
    
       
      track_id 
      start 
      end 
      duration 
      label 
      root 
      bass 
      C 
      Db 
      D 
      ... 
      E 
      F 
      Gb 
      G 
      Ab 
      A 
      Bb 
      B 
      key_diatonic_root_label 
      key_diatonic_root 
     
  
  
    
      0  
         0 
         0.000000 
         2.612267 
        2.612267 
              N 
        0 
        0 
       0 
       0 
       0 
      ... 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       None 
      NaN 
     
    
      1  
         0 
         2.612267 
        11.459070 
        8.846803 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
          E 
        4 
     
    
      2  
         0 
        11.459070 
        12.921927 
        1.462857 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
          E 
        4 
     
    
      3  
         0 
        12.921927 
        17.443474 
        4.521547 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
          E 
        4 
     
    
      4  
         0 
        17.443474 
        20.410362 
        2.966888 
              B 
       11 
       11 
       0 
       0 
       0 
      ... 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
          E 
        4 
     
    
      5  
         0 
        20.410362 
        21.908049 
        1.497687 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
          E 
        4 
     
    
      6  
         0 
        21.908049 
        23.370907 
        1.462858 
          E:7/3 
        4 
        8 
       0 
       0 
       1 
      ... 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
          E 
        4 
     
    
      7  
         0 
        23.370907 
        24.856984 
        1.486077 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
          E 
        4 
     
    
      8  
         0 
        24.856984 
        26.343061 
        1.486077 
       A:min/b3 
        9 
        0 
       1 
       0 
       0 
      ... 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
          E 
        4 
     
    
      9  
         0 
        26.343061 
        27.840748 
        1.497687 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
          E 
        4 
     
    
      10 
         0 
        27.840748 
        29.350045 
        1.509297 
              B 
       11 
       11 
       0 
       0 
       0 
      ... 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
          E 
        4 
     
    
      11 
         0 
        29.350045 
        35.305963 
        5.955918 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
          E 
        4 
     
    
      12 
         0 
        35.305963 
        36.803650 
        1.497687 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
          E 
        4 
     
    
      13 
         0 
        36.803650 
        41.263102 
        4.459452 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
          E 
        4 
     
    
      14 
         0 
        41.263102 
        44.245646 
        2.982544 
              B 
       11 
       11 
       0 
       0 
       0 
      ... 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
          E 
        4 
     
    
      15 
         0 
        44.245646 
        45.720113 
        1.474467 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
          E 
        4 
     
    
      16 
         0 
        45.720113 
        47.206190 
        1.486077 
          E:7/3 
        4 
        8 
       0 
       0 
       1 
      ... 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
          E 
        4 
     
    
      17 
         0 
        47.206190 
        48.692267 
        1.486077 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
          E 
        4 
     
    
      18 
         0 
        48.692267 
        50.155124 
        1.462857 
       A:min/b3 
        9 
        0 
       1 
       0 
       0 
      ... 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
          E 
        4 
     
    
      19 
         0 
        50.155124 
        51.652811 
        1.497687 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
          E 
        4 
     
    
      20 
         0 
        51.652811 
        53.138888 
        1.486077 
              B 
       11 
       11 
       0 
       0 
       0 
      ... 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
          E 
        4 
     
    
      21 
         0 
        53.138888 
        56.111043 
        2.972155 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
          E 
        4 
     
    
      22 
         0 
        56.111043 
        65.131995 
        9.020952 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
          E 
        4 
     
    
      23 
         0 
        65.131995 
        68.150589 
        3.018594 
              B 
       11 
       11 
       0 
       0 
       0 
      ... 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
          E 
        4 
     
    
      24 
         0 
        68.150589 
        71.192403 
        3.041814 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
          E 
        4 
     
    
      25 
         0 
        71.192403 
        74.199387 
        3.006984 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
          E 
        4 
     
    
      26 
         0 
        74.199387 
        75.697074 
        1.497687 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
          E 
        4 
     
    
      27 
         0 
        75.697074 
        80.236575 
        4.539501 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
          E 
        4 
     
    
      28 
         0 
        80.236575 
        83.208730 
        2.972155 
              B 
       11 
       11 
       0 
       0 
       0 
      ... 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
          E 
        4 
     
    
      29 
         0 
        83.208730 
        86.221693 
        3.012963 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
          E 
        4 
     
    
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
     
    
      54 
       179 
       120.053537 
       122.004013 
        1.950476 
              D 
        2 
        2 
       0 
       0 
       1 
      ... 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
          D 
        2 
     
    
      55 
       179 
       122.004013 
       122.967641 
        0.963628 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
          D 
        2 
     
    
      56 
       179 
       122.967641 
       123.942879 
        0.975238 
            G/2 
        7 
        9 
       0 
       0 
       1 
      ... 
       0 
       0 
       0 
       1 
       0 
       1 
       0 
       1 
          D 
        2 
     
    
      57 
       179 
       123.942879 
       127.843832 
        3.900953 
            A:7 
        9 
        9 
       0 
       1 
       0 
      ... 
       1 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
          D 
        2 
     
    
      58 
       179 
       127.843832 
       129.805918 
        1.962086 
              D 
        2 
        2 
       0 
       0 
       1 
      ... 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
          D 
        2 
     
    
      59 
       179 
       129.805918 
       130.792766 
        0.986848 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
          D 
        2 
     
    
      60 
       179 
       130.792766 
       131.245555 
        0.452789 
            G/2 
        7 
        9 
       0 
       0 
       1 
      ... 
       0 
       0 
       0 
       1 
       0 
       1 
       0 
       1 
          D 
        2 
     
    
      61 
       179 
       131.245555 
       131.756394 
        0.510839 
            D/5 
        2 
        9 
       0 
       0 
       1 
      ... 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
          D 
        2 
     
    
      62 
       179 
       131.756394 
       135.622517 
        3.866123 
            A:7 
        9 
        9 
       0 
       1 
       0 
      ... 
       1 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
          D 
        2 
     
    
      63 
       179 
       135.622517 
       137.549773 
        1.927256 
              D 
        2 
        2 
       0 
       0 
       1 
      ... 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
          D 
        2 
     
    
      64 
       179 
       137.549773 
       139.477029 
        1.927256 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
          D 
        2 
     
    
      65 
       179 
       139.477029 
       143.308321 
        3.831292 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
          D 
        2 
     
    
      66 
       179 
       143.308321 
       145.258798 
        1.950477 
              D 
        2 
        2 
       0 
       0 
       1 
      ... 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
          D 
        2 
     
    
      67 
       179 
       145.258798 
       146.245646 
        0.986848 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
          D 
        2 
     
    
      68 
       179 
       146.245646 
       146.733265 
        0.487619 
            G/2 
        7 
        9 
       0 
       0 
       1 
      ... 
       0 
       0 
       0 
       1 
       0 
       1 
       0 
       1 
          D 
        2 
     
    
      69 
       179 
       146.733265 
       147.244104 
        0.510839 
            D/5 
        2 
        9 
       0 
       0 
       1 
      ... 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
          D 
        2 
     
    
      70 
       179 
       147.244104 
       151.110226 
        3.866122 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
          D 
        2 
     
    
      71 
       179 
       151.110226 
       153.060702 
        1.950476 
              D 
        2 
        2 
       0 
       0 
       1 
      ... 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
          D 
        2 
     
    
      72 
       179 
       153.060702 
       154.024331 
        0.963629 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
          D 
        2 
     
    
      73 
       179 
       154.024331 
       154.523560 
        0.499229 
            G/2 
        7 
        9 
       0 
       0 
       1 
      ... 
       0 
       0 
       0 
       1 
       0 
       1 
       0 
       1 
          D 
        2 
     
    
      74 
       179 
       154.523560 
       155.022789 
        0.499229 
            D/5 
        2 
        9 
       0 
       0 
       1 
      ... 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
          D 
        2 
     
    
      75 
       179 
       155.022789 
       158.854081 
        3.831292 
            A:7 
        9 
        9 
       0 
       1 
       0 
      ... 
       1 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
          D 
        2 
     
    
      76 
       179 
       158.854081 
       160.781337 
        1.927256 
              D 
        2 
        2 
       0 
       0 
       1 
      ... 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
          D 
        2 
     
    
      77 
       179 
       160.781337 
       161.489546 
        0.708209 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
          D 
        2 
     
    
      78 
       179 
       161.489546 
       162.174535 
        0.684989 
            G/2 
        7 
        9 
       0 
       0 
       1 
      ... 
       0 
       0 
       0 
       1 
       0 
       1 
       0 
       1 
          D 
        2 
     
    
      79 
       179 
       162.174535 
       162.696984 
        0.522449 
            D/5 
        2 
        9 
       0 
       0 
       1 
      ... 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
          D 
        2 
     
    
      80 
       179 
       162.696984 
       166.423786 
        3.726802 
            A:7 
        9 
        9 
       0 
       1 
       0 
      ... 
       1 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
          D 
        2 
     
    
      81 
       179 
       166.423786 
       168.192617 
        1.768831 
              D 
        2 
        2 
       0 
       0 
       1 
      ... 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
          D 
        2 
     
    
      82 
       179 
       168.192617 
       174.281557 
        6.088940 
            D:7 
        2 
        2 
       1 
       0 
       1 
      ... 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
          D 
        2 
     
    
      83 
       179 
       174.281557 
       186.984490 
       12.702933 
              N 
        0 
        0 
       0 
       0 
       0 
      ... 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
          D 
        2 
     
  
14621 rows × 21 columns
Key distribution in chord segments.
In [56]:
    
chords.key_diatonic_root_label.value_counts()
    
    Out[56]:
G     2916
A     2528
E     2221
C     2198
D     1928
F      983
B      491
Eb     446
Bb     274
Gb     184
Ab     182
Db      90
dtype: int64
In [57]:
    
chords.to_csv('data/beatles/derived/all_chords_with_keys.tsv', sep='\t', index=False, float_format='%.6f')
    
We can see that the key labels are heavily skewed and this might not be good for our ML models.
In order to deskew the class distribution we can generate more data from the existing data by transposing each data point to all 12 keys. This way we'll have a 12x larger dataset and uniform classes.
In [58]:
    
chords.head()
    
    Out[58]:
  
    
       
      track_id 
      start 
      end 
      duration 
      label 
      root 
      bass 
      C 
      Db 
      D 
      ... 
      E 
      F 
      Gb 
      G 
      Ab 
      A 
      Bb 
      B 
      key_diatonic_root_label 
      key_diatonic_root 
     
  
  
    
      0 
       0 
        0.000000 
        2.612267 
       2.612267 
       N 
        0 
        0 
       0 
       0 
       0 
      ... 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       None 
      NaN 
     
    
      1 
       0 
        2.612267 
       11.459070 
       8.846803 
       E 
        4 
        4 
       0 
       0 
       0 
      ... 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
          E 
        4 
     
    
      2 
       0 
       11.459070 
       12.921927 
       1.462857 
       A 
        9 
        9 
       0 
       1 
       0 
      ... 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
          E 
        4 
     
    
      3 
       0 
       12.921927 
       17.443474 
       4.521547 
       E 
        4 
        4 
       0 
       0 
       0 
      ... 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
          E 
        4 
     
    
      4 
       0 
       17.443474 
       20.410362 
       2.966888 
       B 
       11 
       11 
       0 
       0 
       0 
      ... 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
          E 
        4 
     
  
5 rows × 21 columns
In [139]:
    
def add_pitch_classes(a, b):
    return ((a + b) + 12) % 12
def rotate_columns(cols, shift):
    return cols[shift:] + cols[:shift]
pcs_columns = ['C','Db','D','Eb','E','F','Gb','G','Ab','A','Bb','B']
[rotate_columns(pcs_columns, i) for i in range(12)]
    
    Out[139]:
[['C', 'Db', 'D', 'Eb', 'E', 'F', 'Gb', 'G', 'Ab', 'A', 'Bb', 'B'],
 ['Db', 'D', 'Eb', 'E', 'F', 'Gb', 'G', 'Ab', 'A', 'Bb', 'B', 'C'],
 ['D', 'Eb', 'E', 'F', 'Gb', 'G', 'Ab', 'A', 'Bb', 'B', 'C', 'Db'],
 ['Eb', 'E', 'F', 'Gb', 'G', 'Ab', 'A', 'Bb', 'B', 'C', 'Db', 'D'],
 ['E', 'F', 'Gb', 'G', 'Ab', 'A', 'Bb', 'B', 'C', 'Db', 'D', 'Eb'],
 ['F', 'Gb', 'G', 'Ab', 'A', 'Bb', 'B', 'C', 'Db', 'D', 'Eb', 'E'],
 ['Gb', 'G', 'Ab', 'A', 'Bb', 'B', 'C', 'Db', 'D', 'Eb', 'E', 'F'],
 ['G', 'Ab', 'A', 'Bb', 'B', 'C', 'Db', 'D', 'Eb', 'E', 'F', 'Gb'],
 ['Ab', 'A', 'Bb', 'B', 'C', 'Db', 'D', 'Eb', 'E', 'F', 'Gb', 'G'],
 ['A', 'Bb', 'B', 'C', 'Db', 'D', 'Eb', 'E', 'F', 'Gb', 'G', 'Ab'],
 ['Bb', 'B', 'C', 'Db', 'D', 'Eb', 'E', 'F', 'Gb', 'G', 'Ab', 'A'],
 ['B', 'C', 'Db', 'D', 'Eb', 'E', 'F', 'Gb', 'G', 'Ab', 'A', 'Bb']]
In [84]:
    
def rotate_binary_pcs_cols(df, cols, shift):
    return df.rename_axis(dict(zip(cols, rotate_columns(cols, shift))), axis=1)
    
rotate_binary_pcs_cols(chords, pcs_columns, 2)[pcs_columns].head()
    
    Out[84]:
  
    
       
      C 
      Db 
      D 
      Eb 
      E 
      F 
      Gb 
      G 
      Ab 
      A 
      Bb 
      B 
     
  
  
    
      0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
     
    
      1 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
     
    
      2 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
    
      3 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
     
    
      4 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
     
  
In [61]:
    
chords[pcs_columns].head()
    
    Out[61]:
  
    
       
      C 
      Db 
      D 
      Eb 
      E 
      F 
      Gb 
      G 
      Ab 
      A 
      Bb 
      B 
     
  
  
    
      0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
     
    
      1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      2 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
     
    
      3 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
     
    
      4 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
     
  
In [62]:
    
def transpose_col(df, shift):
    return df.apply(lambda pc: add_pitch_classes(pc, shift))
transpose_col(chords[['root', 'bass', 'key_diatonic_root']], 11).head()
    
    Out[62]:
  
    
       
      root 
      bass 
      key_diatonic_root 
     
  
  
    
      0 
       11 
       11 
      NaN 
     
    
      1 
        3 
        3 
        3 
     
    
      2 
        8 
        8 
        3 
     
    
      3 
        3 
        3 
        3 
     
    
      4 
       10 
       10 
        3 
     
  
In [63]:
    
def transpose_chords_df(chords, shift):
    chords_copy = chords.copy()
    chords_copy['synth_transposition'] = shift
    pc_cols = ['root', 'bass', 'key_diatonic_root']
    chords_copy[pc_cols] = transpose_col(chords_copy[pc_cols], shift)
    chords_copy['key_diatonic_root_label'] = chords_copy['key_diatonic_root'].apply(label_for_pitch_class)
    chords_copy = rotate_binary_pcs_cols(chords_copy, pcs_columns, shift)
    chords_copy = chords_copy.rename_axis({'label': 'orig_chord_label'}, axis=1)
    return chords_copy
transpose_chords_df(chords, 1).head()
    
    Out[63]:
  
    
       
      track_id 
      start 
      end 
      duration 
      orig_chord_label 
      root 
      bass 
      Db 
      D 
      Eb 
      ... 
      Gb 
      G 
      Ab 
      A 
      Bb 
      B 
      C 
      key_diatonic_root_label 
      key_diatonic_root 
      synth_transposition 
     
  
  
    
      0 
       0 
        0.000000 
        2.612267 
       2.612267 
       N 
        1 
        1 
       0 
       0 
       0 
      ... 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       None 
      NaN 
       1 
     
    
      1 
       0 
        2.612267 
       11.459070 
       8.846803 
       E 
        5 
        5 
       0 
       0 
       0 
      ... 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
          F 
        5 
       1 
     
    
      2 
       0 
       11.459070 
       12.921927 
       1.462857 
       A 
       10 
       10 
       0 
       1 
       0 
      ... 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
          F 
        5 
       1 
     
    
      3 
       0 
       12.921927 
       17.443474 
       4.521547 
       E 
        5 
        5 
       0 
       0 
       0 
      ... 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
          F 
        5 
       1 
     
    
      4 
       0 
       17.443474 
       20.410362 
       2.966888 
       B 
        0 
        0 
       0 
       0 
       0 
      ... 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
          F 
        5 
       1 
     
  
5 rows × 22 columns
In [93]:
    
def generate_transpositions(chords):
    df = pd.concat([transpose_chords_df(chords, shift) for shift in range(12)])
    df = df[['track_id', 'synth_transposition',
             'start', 'end', 'duration',
             'orig_chord_label', 'root', 'bass',
             'C', 'Db', 'D', 'Eb', 'E', 'F', 'Gb', 'G', 'Ab', 'A', 'Bb', 'B',
             'key_diatonic_root_label', 'key_diatonic_root']]
    return df
    
In [94]:
    
chords_all_synth = generate_transpositions(chords)
    
In [95]:
    
chords_all_synth.columns
    
    Out[95]:
Index(['track_id', 'synth_transposition', 'start', 'end', 'duration', 'orig_chord_label', 'root', 'bass', 'C', 'Db', 'D', 'Eb', 'E', 'F', 'Gb', 'G', 'Ab', 'A', 'Bb', 'B', 'key_diatonic_root_label', 'key_diatonic_root'], dtype='object')
In [96]:
    
len(chords_all_synth)
    
    Out[96]:
175452
All key classes are now of uniform probability.
In [97]:
    
chords_all_synth['key_diatonic_root'].value_counts()
    
    Out[97]:
11    14441
10    14441
9     14441
8     14441
7     14441
6     14441
5     14441
4     14441
3     14441
2     14441
1     14441
0     14441
dtype: int64
In [98]:
    
chords_all_synth[pcs_columns].mean()
    
    Out[98]:
C     0.257164
Db    0.257164
D     0.257164
Eb    0.257164
E     0.257164
F     0.257164
Gb    0.257164
G     0.257164
Ab    0.257164
A     0.257164
Bb    0.257164
B     0.257164
dtype: float64
In [99]:
    
chords_all_synth.head()
    
    Out[99]:
  
    
       
      track_id 
      synth_transposition 
      start 
      end 
      duration 
      orig_chord_label 
      root 
      bass 
      C 
      Db 
      ... 
      E 
      F 
      Gb 
      G 
      Ab 
      A 
      Bb 
      B 
      key_diatonic_root_label 
      key_diatonic_root 
     
  
  
    
      0 
       0 
       0 
        0.000000 
        2.612267 
       2.612267 
       N 
        0 
        0 
       0 
       0 
      ... 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       None 
      NaN 
     
    
      1 
       0 
       0 
        2.612267 
       11.459070 
       8.846803 
       E 
        4 
        4 
       0 
       0 
      ... 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
          E 
        4 
     
    
      2 
       0 
       0 
       11.459070 
       12.921927 
       1.462857 
       A 
        9 
        9 
       0 
       1 
      ... 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
          E 
        4 
     
    
      3 
       0 
       0 
       12.921927 
       17.443474 
       4.521547 
       E 
        4 
        4 
       0 
       0 
      ... 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
          E 
        4 
     
    
      4 
       0 
       0 
       17.443474 
       20.410362 
       2.966888 
       B 
       11 
       11 
       0 
       0 
      ... 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
          E 
        4 
     
  
5 rows × 22 columns
In [100]:
    
chords_all_synth[abs(chords_all_synth['start'] - 2.612267) < 1e-3]
    
    Out[100]:
  
    
       
      track_id 
      synth_transposition 
      start 
      end 
      duration 
      orig_chord_label 
      root 
      bass 
      C 
      Db 
      ... 
      E 
      F 
      Gb 
      G 
      Ab 
      A 
      Bb 
      B 
      key_diatonic_root_label 
      key_diatonic_root 
     
  
  
    
      1 
       0 
        0 
       2.612267 
       11.45907 
       8.846803 
       E 
        4 
        4 
       0 
       0 
      ... 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
        E 
        4 
     
    
      1 
       0 
        1 
       2.612267 
       11.45907 
       8.846803 
       E 
        5 
        5 
       1 
       0 
      ... 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
        F 
        5 
     
    
      1 
       0 
        2 
       2.612267 
       11.45907 
       8.846803 
       E 
        6 
        6 
       0 
       1 
      ... 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       0 
       Gb 
        6 
     
    
      1 
       0 
        3 
       2.612267 
       11.45907 
       8.846803 
       E 
        7 
        7 
       0 
       0 
      ... 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
        G 
        7 
     
    
      1 
       0 
        4 
       2.612267 
       11.45907 
       8.846803 
       E 
        8 
        8 
       1 
       0 
      ... 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       0 
       Ab 
        8 
     
    
      1 
       0 
        5 
       2.612267 
       11.45907 
       8.846803 
       E 
        9 
        9 
       0 
       1 
      ... 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
        A 
        9 
     
    
      1 
       0 
        6 
       2.612267 
       11.45907 
       8.846803 
       E 
       10 
       10 
       0 
       0 
      ... 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       Bb 
       10 
     
    
      1 
       0 
        7 
       2.612267 
       11.45907 
       8.846803 
       E 
       11 
       11 
       0 
       0 
      ... 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
        B 
       11 
     
    
      1 
       0 
        8 
       2.612267 
       11.45907 
       8.846803 
       E 
        0 
        0 
       1 
       0 
      ... 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
        C 
        0 
     
    
      1 
       0 
        9 
       2.612267 
       11.45907 
       8.846803 
       E 
        1 
        1 
       0 
       1 
      ... 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       0 
       Db 
        1 
     
    
      1 
       0 
       10 
       2.612267 
       11.45907 
       8.846803 
       E 
        2 
        2 
       0 
       0 
      ... 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
        D 
        2 
     
    
      1 
       0 
       11 
       2.612267 
       11.45907 
       8.846803 
       E 
        3 
        8 
       0 
       0 
      ... 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       Eb 
        3 
     
  
12 rows × 22 columns
In [101]:
    
chords_all_synth.to_csv('data/beatles/derived/all_chords_with_keys_synth.tsv', sep='\t', index=False, float_format='%.6f')
    
In [247]:
    
chords_all = pd.read_csv('data/beatles/derived/all_chords_with_keys.tsv', sep='\t')
chords_all_synth = pd.read_csv('data/beatles/derived/all_chords_with_keys_synth.tsv', sep='\t')
    
In [248]:
    
chords_all = chords_all.dropna()
chords_all_synth = chords_all_synth.dropna()
chords_all.head()
    
    Out[248]:
  
    
       
      track_id 
      start 
      end 
      duration 
      label 
      root 
      bass 
      C 
      Db 
      D 
      ... 
      E 
      F 
      Gb 
      G 
      Ab 
      A 
      Bb 
      B 
      key_diatonic_root_label 
      key_diatonic_root 
     
  
  
    
      1 
       0 
        2.612267 
       11.459070 
       8.846803 
       E 
        4 
        4 
       0 
       0 
       0 
      ... 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       E 
       4 
     
    
      2 
       0 
       11.459070 
       12.921927 
       1.462857 
       A 
        9 
        9 
       0 
       1 
       0 
      ... 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       E 
       4 
     
    
      3 
       0 
       12.921927 
       17.443474 
       4.521547 
       E 
        4 
        4 
       0 
       0 
       0 
      ... 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       E 
       4 
     
    
      4 
       0 
       17.443474 
       20.410362 
       2.966888 
       B 
       11 
       11 
       0 
       0 
       0 
      ... 
       0 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       E 
       4 
     
    
      5 
       0 
       20.410362 
       21.908049 
       1.497687 
       E 
        4 
        4 
       0 
       0 
       0 
      ... 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       E 
       4 
     
  
5 rows × 21 columns
In [98]:
    
track_chords = chords_all[(chords_all['track_id'] == 40)].copy()
track_chords.head(10)
    
    Out[98]:
  
    
       
      track_id 
      start 
      end 
      duration 
      label 
      root 
      bass 
      C 
      Db 
      D 
      ... 
      F 
      Gb 
      G 
      Ab 
      A 
      Bb 
      B 
      key_diatonic_root_label 
      key_diatonic_root 
      key_index 
     
  
  
    
      2976 
       40 
        0.000000 
        0.421247 
       0.421247 
                 N 
       0 
       0 
       0 
       0 
       0 
      ... 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       A 
       9 
       53 
     
    
      2977 
       40 
        0.421247 
        1.148857 
       0.727610 
       F#:(1,4,b7) 
       6 
       6 
       0 
       0 
       0 
      ... 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       A 
       9 
       53 
     
    
      2978 
       40 
        1.148857 
        4.997527 
       3.848670 
                 A 
       9 
       9 
       0 
       1 
       0 
      ... 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       A 
       9 
       53 
     
    
      2979 
       40 
        4.997527 
        7.053628 
       2.056101 
             A:min 
       9 
       9 
       1 
       0 
       0 
      ... 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       A 
       9 
       53 
     
    
      2980 
       40 
        7.053628 
        8.899614 
       1.845986 
                 G 
       7 
       7 
       0 
       0 
       1 
      ... 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       C 
       0 
       54 
     
    
      2981 
       40 
        8.899614 
       10.873310 
       1.973696 
                 F 
       5 
       5 
       1 
       0 
       0 
      ... 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       C 
       0 
       54 
     
    
      2982 
       40 
       10.873310 
       12.742517 
       1.869207 
                 E 
       4 
       4 
       0 
       0 
       0 
      ... 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       C 
       0 
       54 
     
    
      2983 
       40 
       12.742517 
       16.538979 
       3.796462 
                 A 
       9 
       9 
       0 
       1 
       0 
      ... 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       C 
       0 
       54 
     
    
      2984 
       40 
       16.538979 
       18.477845 
       1.938866 
             A:min 
       9 
       9 
       1 
       0 
       0 
      ... 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       A 
       9 
       55 
     
    
      2985 
       40 
       18.477845 
       20.347052 
       1.869207 
                 G 
       7 
       7 
       0 
       0 
       1 
      ... 
       0 
       0 
       1 
       0 
       0 
       0 
       1 
       C 
       0 
       56 
     
  
10 rows × 22 columns
In [62]:
    
chords_all['key_index'] = ((chords_all['key_diatonic_root'].diff() != 0) | (chords_all['track_id'].diff() != 0)).cumsum()
    
In [63]:
    
chords_all
    
    Out[63]:
  
    
       
      track_id 
      start 
      end 
      duration 
      label 
      root 
      bass 
      C 
      Db 
      D 
      ... 
      F 
      Gb 
      G 
      Ab 
      A 
      Bb 
      B 
      key_diatonic_root_label 
      key_diatonic_root 
      key_index 
     
  
  
    
      1     
         0 
         2.612267 
        11.459070 
        8.846803 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       E 
       4 
         1 
     
    
      2     
         0 
        11.459070 
        12.921927 
        1.462857 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       E 
       4 
         1 
     
    
      3     
         0 
        12.921927 
        17.443474 
        4.521547 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       E 
       4 
         1 
     
    
      4     
         0 
        17.443474 
        20.410362 
        2.966888 
              B 
       11 
       11 
       0 
       0 
       0 
      ... 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       E 
       4 
         1 
     
    
      5     
         0 
        20.410362 
        21.908049 
        1.497687 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       E 
       4 
         1 
     
    
      6     
         0 
        21.908049 
        23.370907 
        1.462858 
          E:7/3 
        4 
        8 
       0 
       0 
       1 
      ... 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       E 
       4 
         1 
     
    
      7     
         0 
        23.370907 
        24.856984 
        1.486077 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       E 
       4 
         1 
     
    
      8     
         0 
        24.856984 
        26.343061 
        1.486077 
       A:min/b3 
        9 
        0 
       1 
       0 
       0 
      ... 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       E 
       4 
         1 
     
    
      9     
         0 
        26.343061 
        27.840748 
        1.497687 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       E 
       4 
         1 
     
    
      10    
         0 
        27.840748 
        29.350045 
        1.509297 
              B 
       11 
       11 
       0 
       0 
       0 
      ... 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       E 
       4 
         1 
     
    
      11    
         0 
        29.350045 
        35.305963 
        5.955918 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       E 
       4 
         1 
     
    
      12    
         0 
        35.305963 
        36.803650 
        1.497687 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       E 
       4 
         1 
     
    
      13    
         0 
        36.803650 
        41.263102 
        4.459452 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       E 
       4 
         1 
     
    
      14    
         0 
        41.263102 
        44.245646 
        2.982544 
              B 
       11 
       11 
       0 
       0 
       0 
      ... 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       E 
       4 
         1 
     
    
      15    
         0 
        44.245646 
        45.720113 
        1.474467 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       E 
       4 
         1 
     
    
      16    
         0 
        45.720113 
        47.206190 
        1.486077 
          E:7/3 
        4 
        8 
       0 
       0 
       1 
      ... 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       E 
       4 
         1 
     
    
      17    
         0 
        47.206190 
        48.692267 
        1.486077 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       E 
       4 
         1 
     
    
      18    
         0 
        48.692267 
        50.155124 
        1.462857 
       A:min/b3 
        9 
        0 
       1 
       0 
       0 
      ... 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       E 
       4 
         1 
     
    
      19    
         0 
        50.155124 
        51.652811 
        1.497687 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       E 
       4 
         1 
     
    
      20    
         0 
        51.652811 
        53.138888 
        1.486077 
              B 
       11 
       11 
       0 
       0 
       0 
      ... 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       E 
       4 
         1 
     
    
      21    
         0 
        53.138888 
        56.111043 
        2.972155 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       E 
       4 
         1 
     
    
      22    
         0 
        56.111043 
        65.131995 
        9.020952 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       E 
       4 
         1 
     
    
      23    
         0 
        65.131995 
        68.150589 
        3.018594 
              B 
       11 
       11 
       0 
       0 
       0 
      ... 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       E 
       4 
         1 
     
    
      24    
         0 
        68.150589 
        71.192403 
        3.041814 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       E 
       4 
         1 
     
    
      25    
         0 
        71.192403 
        74.199387 
        3.006984 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       E 
       4 
         1 
     
    
      26    
         0 
        74.199387 
        75.697074 
        1.497687 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       E 
       4 
         1 
     
    
      27    
         0 
        75.697074 
        80.236575 
        4.539501 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       E 
       4 
         1 
     
    
      28    
         0 
        80.236575 
        83.208730 
        2.972155 
              B 
       11 
       11 
       0 
       0 
       0 
      ... 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
       E 
       4 
         1 
     
    
      29    
         0 
        83.208730 
        86.221693 
        3.012963 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
       E 
       4 
         1 
     
    
      30    
         0 
        86.221693 
        87.736621 
        1.514928 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       E 
       4 
         1 
     
    
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
     
    
      14591 
       179 
       120.053537 
       122.004013 
        1.950476 
              D 
        2 
        2 
       0 
       0 
       1 
      ... 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       D 
       2 
       249 
     
    
      14592 
       179 
       122.004013 
       122.967641 
        0.963628 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       D 
       2 
       249 
     
    
      14593 
       179 
       122.967641 
       123.942879 
        0.975238 
            G/2 
        7 
        9 
       0 
       0 
       1 
      ... 
       0 
       0 
       1 
       0 
       1 
       0 
       1 
       D 
       2 
       249 
     
    
      14594 
       179 
       123.942879 
       127.843832 
        3.900953 
            A:7 
        9 
        9 
       0 
       1 
       0 
      ... 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       D 
       2 
       249 
     
    
      14595 
       179 
       127.843832 
       129.805918 
        1.962086 
              D 
        2 
        2 
       0 
       0 
       1 
      ... 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       D 
       2 
       249 
     
    
      14596 
       179 
       129.805918 
       130.792766 
        0.986848 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       D 
       2 
       249 
     
    
      14597 
       179 
       130.792766 
       131.245555 
        0.452789 
            G/2 
        7 
        9 
       0 
       0 
       1 
      ... 
       0 
       0 
       1 
       0 
       1 
       0 
       1 
       D 
       2 
       249 
     
    
      14598 
       179 
       131.245555 
       131.756394 
        0.510839 
            D/5 
        2 
        9 
       0 
       0 
       1 
      ... 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       D 
       2 
       249 
     
    
      14599 
       179 
       131.756394 
       135.622517 
        3.866123 
            A:7 
        9 
        9 
       0 
       1 
       0 
      ... 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       D 
       2 
       249 
     
    
      14600 
       179 
       135.622517 
       137.549773 
        1.927256 
              D 
        2 
        2 
       0 
       0 
       1 
      ... 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       D 
       2 
       249 
     
    
      14601 
       179 
       137.549773 
       139.477029 
        1.927256 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       D 
       2 
       249 
     
    
      14602 
       179 
       139.477029 
       143.308321 
        3.831292 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       D 
       2 
       249 
     
    
      14603 
       179 
       143.308321 
       145.258798 
        1.950477 
              D 
        2 
        2 
       0 
       0 
       1 
      ... 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       D 
       2 
       249 
     
    
      14604 
       179 
       145.258798 
       146.245646 
        0.986848 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       D 
       2 
       249 
     
    
      14605 
       179 
       146.245646 
       146.733265 
        0.487619 
            G/2 
        7 
        9 
       0 
       0 
       1 
      ... 
       0 
       0 
       1 
       0 
       1 
       0 
       1 
       D 
       2 
       249 
     
    
      14606 
       179 
       146.733265 
       147.244104 
        0.510839 
            D/5 
        2 
        9 
       0 
       0 
       1 
      ... 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       D 
       2 
       249 
     
    
      14607 
       179 
       147.244104 
       151.110226 
        3.866122 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       D 
       2 
       249 
     
    
      14608 
       179 
       151.110226 
       153.060702 
        1.950476 
              D 
        2 
        2 
       0 
       0 
       1 
      ... 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       D 
       2 
       249 
     
    
      14609 
       179 
       153.060702 
       154.024331 
        0.963629 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       D 
       2 
       249 
     
    
      14610 
       179 
       154.024331 
       154.523560 
        0.499229 
            G/2 
        7 
        9 
       0 
       0 
       1 
      ... 
       0 
       0 
       1 
       0 
       1 
       0 
       1 
       D 
       2 
       249 
     
    
      14611 
       179 
       154.523560 
       155.022789 
        0.499229 
            D/5 
        2 
        9 
       0 
       0 
       1 
      ... 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       D 
       2 
       249 
     
    
      14612 
       179 
       155.022789 
       158.854081 
        3.831292 
            A:7 
        9 
        9 
       0 
       1 
       0 
      ... 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       D 
       2 
       249 
     
    
      14613 
       179 
       158.854081 
       160.781337 
        1.927256 
              D 
        2 
        2 
       0 
       0 
       1 
      ... 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       D 
       2 
       249 
     
    
      14614 
       179 
       160.781337 
       161.489546 
        0.708209 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
       D 
       2 
       249 
     
    
      14615 
       179 
       161.489546 
       162.174535 
        0.684989 
            G/2 
        7 
        9 
       0 
       0 
       1 
      ... 
       0 
       0 
       1 
       0 
       1 
       0 
       1 
       D 
       2 
       249 
     
    
      14616 
       179 
       162.174535 
       162.696984 
        0.522449 
            D/5 
        2 
        9 
       0 
       0 
       1 
      ... 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       D 
       2 
       249 
     
    
      14617 
       179 
       162.696984 
       166.423786 
        3.726802 
            A:7 
        9 
        9 
       0 
       1 
       0 
      ... 
       0 
       0 
       1 
       0 
       1 
       0 
       0 
       D 
       2 
       249 
     
    
      14618 
       179 
       166.423786 
       168.192617 
        1.768831 
              D 
        2 
        2 
       0 
       0 
       1 
      ... 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       D 
       2 
       249 
     
    
      14619 
       179 
       168.192617 
       174.281557 
        6.088940 
            D:7 
        2 
        2 
       1 
       0 
       1 
      ... 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
       D 
       2 
       249 
     
    
      14620 
       179 
       174.281557 
       186.984490 
       12.702933 
              N 
        0 
        0 
       0 
       0 
       0 
      ... 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       D 
       2 
       249 
     
  
14441 rows × 22 columns
In [96]:
    
# track_chords.groupby(['track_id']).last()['key_index']
(chords_all.groupby(['track_id', 'key_index']).count()['start'] > 16).mean()
    
    Out[96]:
0.76305220883534142
In [222]:
    
c = chords_all[:200]
c
    
    Out[222]:
  
    
       
      track_id 
      start 
      end 
      duration 
      label 
      root 
      bass 
      C 
      Db 
      D 
      ... 
      F 
      Gb 
      G 
      Ab 
      A 
      Bb 
      B 
      key_diatonic_root_label 
      key_diatonic_root 
      key_index 
     
  
  
    
      1   
       0 
         2.612267 
        11.459070 
       8.846803 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
        E 
        4 
       1 
     
    
      2   
       0 
        11.459070 
        12.921927 
       1.462857 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
        E 
        4 
       1 
     
    
      3   
       0 
        12.921927 
        17.443474 
       4.521547 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
        E 
        4 
       1 
     
    
      4   
       0 
        17.443474 
        20.410362 
       2.966888 
              B 
       11 
       11 
       0 
       0 
       0 
      ... 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
        E 
        4 
       1 
     
    
      5   
       0 
        20.410362 
        21.908049 
       1.497687 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
        E 
        4 
       1 
     
    
      6   
       0 
        21.908049 
        23.370907 
       1.462858 
          E:7/3 
        4 
        8 
       0 
       0 
       1 
      ... 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
        E 
        4 
       1 
     
    
      7   
       0 
        23.370907 
        24.856984 
       1.486077 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
        E 
        4 
       1 
     
    
      8   
       0 
        24.856984 
        26.343061 
       1.486077 
       A:min/b3 
        9 
        0 
       1 
       0 
       0 
      ... 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
        E 
        4 
       1 
     
    
      9   
       0 
        26.343061 
        27.840748 
       1.497687 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
        E 
        4 
       1 
     
    
      10  
       0 
        27.840748 
        29.350045 
       1.509297 
              B 
       11 
       11 
       0 
       0 
       0 
      ... 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
        E 
        4 
       1 
     
    
      11  
       0 
        29.350045 
        35.305963 
       5.955918 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
        E 
        4 
       1 
     
    
      12  
       0 
        35.305963 
        36.803650 
       1.497687 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
        E 
        4 
       1 
     
    
      13  
       0 
        36.803650 
        41.263102 
       4.459452 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
        E 
        4 
       1 
     
    
      14  
       0 
        41.263102 
        44.245646 
       2.982544 
              B 
       11 
       11 
       0 
       0 
       0 
      ... 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
        E 
        4 
       1 
     
    
      15  
       0 
        44.245646 
        45.720113 
       1.474467 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
        E 
        4 
       1 
     
    
      16  
       0 
        45.720113 
        47.206190 
       1.486077 
          E:7/3 
        4 
        8 
       0 
       0 
       1 
      ... 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
        E 
        4 
       1 
     
    
      17  
       0 
        47.206190 
        48.692267 
       1.486077 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
        E 
        4 
       1 
     
    
      18  
       0 
        48.692267 
        50.155124 
       1.462857 
       A:min/b3 
        9 
        0 
       1 
       0 
       0 
      ... 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
        E 
        4 
       1 
     
    
      19  
       0 
        50.155124 
        51.652811 
       1.497687 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
        E 
        4 
       1 
     
    
      20  
       0 
        51.652811 
        53.138888 
       1.486077 
              B 
       11 
       11 
       0 
       0 
       0 
      ... 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
        E 
        4 
       1 
     
    
      21  
       0 
        53.138888 
        56.111043 
       2.972155 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
        E 
        4 
       1 
     
    
      22  
       0 
        56.111043 
        65.131995 
       9.020952 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
        E 
        4 
       1 
     
    
      23  
       0 
        65.131995 
        68.150589 
       3.018594 
              B 
       11 
       11 
       0 
       0 
       0 
      ... 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
        E 
        4 
       1 
     
    
      24  
       0 
        68.150589 
        71.192403 
       3.041814 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
        E 
        4 
       1 
     
    
      25  
       0 
        71.192403 
        74.199387 
       3.006984 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
        E 
        4 
       1 
     
    
      26  
       0 
        74.199387 
        75.697074 
       1.497687 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
        E 
        4 
       1 
     
    
      27  
       0 
        75.697074 
        80.236575 
       4.539501 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
        E 
        4 
       1 
     
    
      28  
       0 
        80.236575 
        83.208730 
       2.972155 
              B 
       11 
       11 
       0 
       0 
       0 
      ... 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
        E 
        4 
       1 
     
    
      29  
       0 
        83.208730 
        86.221693 
       3.012963 
              E 
        4 
        4 
       0 
       0 
       0 
      ... 
       0 
       0 
       0 
       1 
       0 
       0 
       1 
        E 
        4 
       1 
     
    
      30  
       0 
        86.221693 
        87.736621 
       1.514928 
              A 
        9 
        9 
       0 
       1 
       0 
      ... 
       0 
       0 
       0 
       0 
       1 
       0 
       0 
        E 
        4 
       1 
     
    
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
     
    
      174 
       2 
       157.240183 
       159.480454 
       2.240271 
              D 
        2 
        2 
       0 
       0 
       1 
      ... 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
        D 
        2 
       3 
     
    
      175 
       2 
       159.480454 
       161.624986 
       2.144532 
          B:min 
       11 
       11 
       0 
       0 
       1 
      ... 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
        D 
        2 
       3 
     
    
      176 
       2 
       161.624986 
       163.941847 
       2.316861 
              D 
        2 
        2 
       0 
       0 
       1 
      ... 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
        D 
        2 
       3 
     
    
      177 
       2 
       163.941847 
       165.990642 
       2.048795 
          B:min 
       11 
       11 
       0 
       0 
       1 
      ... 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
        D 
        2 
       3 
     
    
      178 
       2 
       165.990642 
       168.173469 
       2.182827 
              D 
        2 
        2 
       0 
       0 
       1 
      ... 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
        D 
        2 
       3 
     
    
      179 
       2 
       168.173469 
       170.528625 
       2.355156 
          B:min 
       11 
       11 
       0 
       0 
       1 
      ... 
       0 
       1 
       0 
       0 
       0 
       0 
       1 
        D 
        2 
       3 
     
    
      180 
       2 
       170.528625 
       174.530476 
       4.001851 
              D 
        2 
        2 
       0 
       0 
       1 
      ... 
       0 
       1 
       0 
       0 
       1 
       0 
       0 
        D 
        2 
       3 
     
    
      182 
       3 
         0.000000 
         0.459543 
       0.459543 
              N 
        0 
        0 
       0 
       0 
       0 
      ... 
       0 
       0 
       0 
       0 
       0 
       0 
       0 
       Bb 
       10 
       4 
     
    
      183 
       3 
         0.459543 
         7.639897 
       7.180354 
             Bb 
       10 
       10 
       0 
       0 
       1 
      ... 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       Bb 
       10 
       4 
     
    
      184 
       3 
         7.639897 
        14.977403 
       7.337506 
             Bb 
       10 
       10 
       0 
       0 
       1 
      ... 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       Bb 
       10 
       4 
     
    
      185 
       3 
        14.977403 
        18.646156 
       3.668753 
           Eb:7 
        3 
        3 
       0 
       1 
       0 
      ... 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       Bb 
       10 
       4 
     
    
      186 
       3 
        18.646156 
        22.338129 
       3.691973 
             Bb 
       10 
       10 
       0 
       0 
       1 
      ... 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       Bb 
       10 
       4 
     
    
      187 
       3 
        22.338129 
        24.184115 
       1.845986 
            F:9 
        5 
        5 
       1 
       0 
       0 
      ... 
       1 
       0 
       1 
       0 
       1 
       0 
       0 
       Bb 
       10 
       4 
     
    
      188 
       3 
        24.184115 
        26.041712 
       1.857597 
           Eb:9 
        3 
        3 
       0 
       1 
       0 
      ... 
       1 
       0 
       1 
       0 
       0 
       1 
       0 
       Bb 
       10 
       4 
     
    
      189 
       3 
        26.041712 
        27.910918 
       1.869206 
             Bb 
       10 
       10 
       0 
       0 
       1 
      ... 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       Bb 
       10 
       4 
     
    
      190 
       3 
        27.910918 
        29.780124 
       1.869206 
              F 
        5 
        5 
       1 
       0 
       0 
      ... 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       Bb 
       10 
       4 
     
    
      191 
       3 
        29.780124 
        37.106020 
       7.325896 
             Bb 
       10 
       10 
       0 
       0 
       1 
      ... 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       Bb 
       10 
       4 
     
    
      192 
       3 
        37.106020 
        40.797993 
       3.691973 
           Eb:7 
        3 
        3 
       0 
       1 
       0 
      ... 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       Bb 
       10 
       4 
     
    
      193 
       3 
        40.797993 
        44.466746 
       3.668753 
             Bb 
       10 
       10 
       0 
       0 
       1 
      ... 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       Bb 
       10 
       4 
     
    
      194 
       3 
        44.466746 
        46.324342 
       1.857596 
            F:9 
        5 
        5 
       1 
       0 
       0 
      ... 
       1 
       0 
       1 
       0 
       1 
       0 
       0 
       Bb 
       10 
       4 
     
    
      195 
       3 
        46.324342 
        48.170328 
       1.845986 
           Eb:9 
        3 
        3 
       0 
       1 
       0 
      ... 
       1 
       0 
       1 
       0 
       0 
       1 
       0 
       Bb 
       10 
       4 
     
    
      196 
       3 
        48.170328 
        49.981485 
       1.811157 
             Bb 
       10 
       10 
       0 
       0 
       1 
      ... 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       Bb 
       10 
       4 
     
    
      197 
       3 
        49.981485 
        51.839081 
       1.857596 
           Bb:7 
       10 
       10 
       0 
       0 
       1 
      ... 
       1 
       0 
       0 
       1 
       0 
       1 
       0 
       Bb 
       10 
       4 
     
    
      198 
       3 
        51.839081 
        55.589104 
       3.750023 
             Eb 
        3 
        3 
       0 
       0 
       0 
      ... 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       Bb 
       10 
       4 
     
    
      199 
       3 
        55.589104 
        59.292687 
       3.703583 
             Bb 
       10 
       10 
       0 
       0 
       1 
      ... 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       Bb 
       10 
       4 
     
    
      200 
       3 
        59.292687 
        63.042709 
       3.750022 
             Eb 
        3 
        3 
       0 
       0 
       0 
      ... 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       Bb 
       10 
       4 
     
    
      201 
       3 
        63.042709 
        66.734682 
       3.691973 
              F 
        5 
        5 
       1 
       0 
       0 
      ... 
       1 
       0 
       0 
       0 
       1 
       0 
       0 
       Bb 
       10 
       4 
     
    
      202 
       3 
        66.734682 
        74.118628 
       7.383946 
             Bb 
       10 
       10 
       0 
       0 
       1 
      ... 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       Bb 
       10 
       4 
     
    
      203 
       3 
        74.118628 
        77.857040 
       3.738412 
           Eb:7 
        3 
        3 
       0 
       1 
       0 
      ... 
       0 
       0 
       1 
       0 
       0 
       1 
       0 
       Bb 
       10 
       4 
     
    
      204 
       3 
        77.857040 
        81.525793 
       3.668753 
             Bb 
       10 
       10 
       0 
       0 
       1 
      ... 
       1 
       0 
       0 
       0 
       0 
       1 
       0 
       Bb 
       10 
       4 
     
  
200 rows × 22 columns
In [217]:
    
def pcs_block_cols(block_size):
    return ['%s_%02d'%(pc, i) for i in range(block_size) for pc in pcs_columns]
def block_columns(block_size): 
    return pcs_block_cols(block_size) + ['key_diatonic_root']
def merge_chord_block(block_df):
    all_pcs = block_df.as_matrix(columns=pcs_columns).ravel()
    most_frequent_key = block_df['key_diatonic_root'].value_counts().index[0]
    return np.hstack([all_pcs, most_frequent_key])
    
In [252]:
    
def roll_chords(chords_df, window_size=4):
    blocks = (chords_df.iloc[start:start+window_size] for start in range(len(chords_df) - window_size + 1))
    c_rolling = (merge_chord_block(block) for block in blocks)
    df_rolling = pd.DataFrame(c_rolling, columns=block_columns(window_size)).astype(np.int16)
    return df_rolling
    
Generate data points by reshaping input rows in the rolling window and selecting the most frequent output label. Do this for both original and synthetic data and for a different window sizes.
In [256]:
    
# TODO: optimize this, since it is not really efficient (~20 minutes for all the files...)
    
In [254]:
    
for postfix, chords in [('', chords_all), ('_synth', chords_all_synth)]:
    for window in (1,2,4,8,16):
        print('window:', window)
        chords_rolling = roll_chords(chords, window_size=window)
        print('shape:', chords_rolling.shape)
        chords_rolling.to_csv('data/beatles/derived/all_chords_with_keys'+postfix+'_rolling_'+str(window)+'.tsv', sep='\t', index=False)
    
    
window: 1
shape: (14441, 13)
window: 2
shape: (14440, 25)
window: 4
shape: (14438, 49)
window: 8
shape: (14434, 97)
window: 16
shape: (14426, 193)
window: 1
shape: (173292, 13)
window: 2
shape: (173291, 25)
window: 4
shape: (173289, 49)
window: 8
shape: (173285, 97)
window: 16
shape: (173277, 193)
In [ ]:
    
    
Content source: bzamecnik/ml-playground
Similar notebooks: