Frekvenssitaulukot Exceliin

In [1]:
import pandas as pd

# Avaan datan dataframeen
df = pd.read_excel('http://taanila.fi/data1.xlsx')
In [2]:
# Muodostan uuden dataframen ristiintaulukoitavista muuttujista
columns = ['sukup', 'perhe', 'koulutus', 'johto', 'työtov',
        'työymp', 'palkkat', 'työteht']
df1 = pd.DataFrame(df, columns = columns)

# Korvaan muuttujien numeroarvoja oikeilla nimillä
df1['sukup'] = df1['sukup'].replace([1, 2], ['Mies', 'Nainen'])
df1['perhe'] = df1['perhe'].replace([1, 2], ['Perheetön', 'Perheellinen'])
In [3]:
# Alustan ExcelWriterin kirjoittamaan uuteen tiedostoon frekvenssit.xlsx
writer = pd.ExcelWriter('frekvenssit.xlsx', engine='xlsxwriter')

# Pidän kirjaa rivinumerosta rivi-muuttujan avulla
rivi = 0

# Käyn for-silmukalla läpi kaikki dataframen muuttujat (sarakkeet)
for var in df1:
    
    # Lasken frekvenssit df2-nimiseen dataframeen
    df2 = pd.crosstab(df1[var], 'lkm')
    
    # Lasken df2:een prosentit
    df2['prosenttia'] = df2/df2.sum()
    
    # Lisään df2:een Yhteensä-rivin
    df2.loc['Yhteensä'] = df2.sum()
    
    # Kirjoitan df2:een Frekvenssit-taulukkovälilehdelle
    df2.to_excel(writer, sheet_name = 'Frekvenssit', startrow=rivi)
    
    # Kasvatan rivinumeroa; shape[0] antaa df2:n rivimäärän (shape[1] antaisi sarakkeiden määrän)
    rivi = rivi + df2.shape[0] + 2
    
# Lisään C-sarakkeeseen prosenttimuotoilun
format = writer.book.add_format({'num_format': '0.0%'})
writer.sheets['Frekvenssit'].set_column('C:C', cell_format=format)

# Tallennan Excel-tiedoston
writer.save()

Tämän jälkeen voin avata frekvenssit.xlsx -tiedoston Exceliin ja katsoa mitä sain aikaan.