Avainsana-arkisto: ExcelWriter

Frekvenssitaulukot Exceliin

Päivitetty 24.9.2017

Tämän artikkelin koodin ohjeineen löydät GitHubista https://github.com/taanila/tilastoapu

Edellisessä artikkelissani Tunnuslukuja Exceliin kerroin miten lasket Pythonilla käden käänteessä aineiston tunnusluvut ja korrelaatiot ja tallennat tulokset Exceliin. Frekvenssitaulukoiden laskenta edellyttää enemmän Python-taitoja. Frekvenssitaulukot voin laskea Pythonissa monella eri tavalla. Yrityksen ja erehdyksen kautta olen itse päätynyt seuravassa kuvaamaani tapaan, mutta helpompia ja tehokkaampiakin tapoja voi olla olemassa.

Aluksi otan käyttöön pandas-ohjelmakirjaston, avaan aineiston ja alustan ExcelWriterin kirjoittamaan frekvenssit.xlsx -nimiseen tiedostoon. Tämä kaikki on sinulle toivottavasti tuttua jo edellisestä artikkelistani.

import pandas as pd
df=pd.read_excel('http://www.elisanet.fi/taanila/data1.xlsx', sheetname='Data')
writer = pd.ExcelWriter('frekvenssit.xlsx', engine='xlsxwriter')

Seuraavaksi alustan muuttujan rivi arvoksi 0. Tätä muuttujaa tarvitsen osoittaessani mille Excel-taulukon riville tietoja milloinkin kirjoitan. Aloitan arvosta 0, koska Python numeroi rivit alkaen arvosta 0.

rivi=0

Hyödynnän for-toistorakennetta käydäkseni läpi kaikki aineiston muuttujat (sarakkeet). Tällä tavalla toteutettuna voin käyttää ohjelmaa minkä tahansa aineiston kanssa. For-rakenteen aloitan komennolla:

for var in df:

For-rakenne käy läpi yksi kerrallaan kaikki dataframesta df löytyvät muuttujat (sarakkeet). Muuttujan nimen var sijasta olisin voinut käyttää mitä tahansa keksimääni nimeä. Kaksoispiste on pakollinen ja merkitsee for-rakenteen aloitusta. Kaksoispisteen jälkeen kaikki ohjelmarivit, jotka ovat sisennettyjä, sisältyvät for-rakenteeseen. Monissa muissa ohjelmointikielissä for-rakenne lopetetaan erillisellä komennolla, mutta Pythonissa for-rakenne loppuu kun sisennetyt ohjelmarivit loppuvat. Jos kopioit alla olevat rivit suoraan omaan ohjelmaasi, niin muista sisentää rivit. Minä sisällytin for-rakenteeseen seuraavat ohjelmarivit:

df1=pd.crosstab(df[var],'lkm')
df1=df1.assign(prosenttia=df1/df1.sum())
df1.loc['Yhteensä']=df1.sum()
df1.to_excel(writer, sheet_name='Frekvenssit', startrow=rivi)
rivi=rivi+df1.shape[0]+2

Käytän crosstab-toimintoa lukumäärien laskemiseen. Crosstab on tässä kätevä, koska sen tuloksena syntyy dataframe, jonka voin helposti kirjoittaa Excel-taulukkoon. Nimeän syntyvät dataframen nimellä df1.

Assign-toiminnolla lisään df1-dataframeen uuden sarakkeen, johon lasken prosentit. Huomaa, miten kätevästi voin suorittaa laskennan dataframessa.

df1.loc[’Yhteensä’]=df1.sum() lisää df1-dataframen viimeiseksi riviksi summa-rivin.

Seuraavaksi kirjoitan df1-dataframen Frekvenssit-taulukkovälilehdelle alkaen rivi-muuttujan osoittamalta riviltä.

Seuraavaksi kasvatan rivi-muuttujan arvoa, jotta seuraava frekvenssitaulukko kirjoitetaan edellisen alapuolelle siten että väliin jää yksi tyhjä rivi. Dataframen df1 rivimäärän saan selville df1.shape[0] -komennolla. Komento df1.shape[1] kertoisi vastaavasti dataframen df1 sarakkeiden määrän.

Lopuksi vaihdan prosentteja sisältävälle sarakkeelle prosenttimuotoilun. Seuraavia ohjelmarivejä en enää sisennä, koska en halua toistaa niitä jokaisella for-rakenteen toistokerralla:

format = writer.book.add_format({'num_format': '0.0%'})
writer.sheets['Frekvenssit'].set_column('C:C',None, format)

Aluksi lisään writer.book oliolle prosenttimuotoilun, jossa on yksi desimaali. Tämän jälkeen asetan kyseisen muotoilun Frekvenssit-taulukkovälilehden C-sarakkeelle.

Kaiken päätteeksi tietenkin vielä tallennan edellä muodostetun Excelin:

writer.save()

Tämän jälkeen voin avata frekvenssit.xlsx-tiedoston Exceliin ja tutustua aikaansaannokseeeni.

Huomaa, että edellä kuvaamani ohjelma toimii sellaisenaan mille tahansa tilastoaineistolle kunhan vaihdan aineiston avaamiskomennossa tiedostonimen ja polun, josta tiedosto löytyy.

Seuraavassa artikkelissani Ristiintaulukointi lasken crosstab-toiminnolla ristiintaulukointeja.

Mainokset

Tunnuslukuja Exceliin

Päivitetty 18.9.2017

Tämän artikkelin koodin ohjeineen löydät GitHubista https://github.com/taanila/tilastoapu

Vaikka käyttäisit Exceliä, niin jotkin asiat sujuvat nopeammin Pythonin kautta. Seuraavassa kerron, miten lasket Pythonilla tunnuslukuja ja korrelaatioita Excel-aineistosta ja kirjoitat tulokset Excel-tiedostoon. Tämä sujuu hämmästyttävän helposti.

Otan käyttöön Pandas-ohjelmakirjaston ja avaan Excel-tiedoston:

import pandas as pd
df=pd.read_excel('http://www.elisanet.fi/taanila/data1.xlsx', sheetname='Data')

Alustan ExcelWriterin kirjoittamaan uuteen Excel-tiedostoon:

writer = pd.ExcelWriter('tunnusluvut.xlsx', engine='xlsxwriter')

Lasken tunnuslukuja describe()-funktiolla ja kirjoitan tunnusluvut Excel-tiedostoon Tunnusluvut-taulukkovälilehdelle:

df.describe().to_excel(writer, sheet_name='Tunnusluvut')

Lasken korrelaatioita corr()-funktiolla ja kirjoitan korrelaatiot Excel-tiedostoon Korrelaatiot-taulukkovälilehdelle:

df.corr().to_excel(writer, sheet_name='Korrelaatiot')

Lopuksi tallennan Excel-tiedoston:

writer.save()

Tämän jälkeen voin avata Jupyterin oletuskansiosta tunnusluvut.xlsx-tiedoston Exceliin ja hämmästellä mitä sain aikaan näin vähällä vaivalla.

Pythonilla voin myös muotoilla Exceliin kirjoitettavat tiedot ja jopa luoda Excel-kaavioita. Lisätietoa ExcelWriterista: http://xlsxwriter.readthedocs.io/working_with_pandas.html

Seuraavassa artikkelissani Frekvenssitaulukot Exceliin kerron, miten voit laskea aineiston muuttujista frekvenssitaulukot ja kirjoittaa ne Exceliin.