dinsdag 17 juli 2018

Bepaal voorziensoort combinaties

@author: wagenerj


Bepaal hoevaak een bepaalde combinatie van voorzieningsoortenin voorkomt bij een client
en sorteer naar voorkomens
"""

import pandas as pd
#factuurlines = pd.read_csv("C:\\Users\\wagenerj\\Documents\\MyPython\\Data\\grip\\df_debet_geschoond.csv",sep=";",engine='python')
jeugdlines= pd.read_csv("\\\\basis.lan\\amsterdam\\IVSociaal\\17.BusinessIntelligence\\09.InterneProjecten\\ZichtEnGripOpSociaal\\Output bestanden\\met vzcode en leveringsvorm\\GRIP_Jeugd_2017_19062018_inclGI.csv",sep=",",engine='python')


jeugdlines["teller"]=1
jeugdlines

df_bsn_vzsoort=pd.pivot_table(jeugdlines,index=("C_CLIENT"),columns=("N_SRT_VOORZ"),values="teller",aggfunc="count")
df_bsn_vzsoort

#zet alle vxsoorten groter dan 1 op 1
df_bsn_vzsoort=df_bsn_vzsoort>0
df_bsn_vzsoort=df_bsn_vzsoort*1

#
vzsoort_list=df_bsn_vzsoort.columns


df_bsn_vzsoort['aantal_voorz']=df_bsn_vzsoort[:].sum(axis=1)
#filter clienten met slechts 1 voorziening eruit
df_bsn_vzcombi=df_bsn_vzsoort[df_bsn_vzsoort['aantal_voorz']>1]
#haal nu het veld aantal_voorz eruit.
#list comprehension in python: Gebruik om het veld teller te verwijderen
juistKolommen = [k for k in df_bsn_vzcombi.columns if k is not 'aantal_voorz']
df_bsn_vzcombi=df_bsn_vzcombi[juistKolommen]

#voeg nieuw veld toe waarbij alle 1 en 0 achter elkaar geplakt worden
df_bsn_vzcombi['voorz_combi']=df_bsn_vzcombi[:].astype(str).apply('-'.join, axis=1)

df_bsn_vzcombi=df_bsn_vzcombi.reset_index()

df_bsn_vzcombi1=df_bsn_vzcombi.groupby(by="voorz_combi")["C_CLIENT"].count()
df_bsn_vzcombi2 = df_bsn_vzcombi1.reset_index()

df_bsn_vzcombi2=df_bsn_vzcombi2.sort_values(by="C_CLIENT",ascending=False)
df_bsn_vzcombi2 = df_bsn_vzcombi2.reset_index()

#manier 1
mycodes=[]
for index,row in df_bsn_vzcombi2.iterrows():
    code_list=row["voorz_combi"].split("-")
    codering=[]
    for num,code in enumerate(code_list, start=0):
        #print(vzsoort_list[num],code)
        if code=="1" : codering.append(vzsoort_list[num])
    mycodes.append(codering)
df_bsn_vzcombi2["mycodes"]=mycodes

#manier 2 de meest efficiente
def hercoderen(waarde, lijst):
    code_list=waarde.split("-")
    codering=[]
    for num,code in enumerate(code_list, start=0):
        #print(vzsoort_list[num],code)
        if code=="1" : codering.append(lijst[num])   
    return codering

mycodes=[]
df_bsn_vzcombi2["mycodes2"]=df_bsn_vzcombi2["voorz_combi"].apply(hercoderen, args=(vzsoort_list,))

maandag 16 juli 2018

Eigen functie toepassen op dataframe


Het is mogelijk om op alle waarden in een kolom in een dataframe een eigen functie toe te passen.

def mijnfunctie(waarde):
    code_list=waarde.split("-")
    return code_list

df_bsn_vzcombi2["mycodes2"]=df_bsn_vzcombi2["voorz_combi"].apply(mijnfunctie)

>>>>> hierbij wordt de waarde in df_bsn_vzcombi2["voorz_combi"] doorgegeven als eerste argument aan de functie


>>>>> Je kan ook andere argumenten doorgegeven aan de functie via args




def hercoderen(waarde, lijst):
    code_list=waarde.split("-")
    codering=[]
    for num,code in enumerate(code_list, start=0):
        #print(vzsoort_list[num],code)
        if code=="1" : codering.append(lijst[num])   
    return codering

mycodes=[]
df_bsn_vzcombi2["mycodes2"]=df_bsn_vzcombi2["voorz_combi"].apply(hercoderen, args=(vzsoort_list,))

dinsdag 10 juli 2018

Panda truukjes: pivoteren dataframe velden verwijderen of volgorde aanpassen

handig https://www.shanelynn.ie/summarising-aggregation-and-grouping-data-in-python-pandas/


import pandas
factuurlines = pd.read_csv("df_debet_geschoond.csv",sep=";",engine='python' )

factuurlines["BEDR_FACT__GOEDGEKEURD"].sum()

a=factuurlines.groupby('C_CLIENT')


pd.pivot_table(factuurlines,index="N_PRODUCTCODE",values="BEDR_FACT__GOEDGEKEURD")
pd.pivot_table(factuurlines,index=("C_CLIENT","N_SRT_VOORZ","C_VOORZ","N_PRODUCTCODE"),values="BEDR_FACT__GOEDGEKEURD")
df_pivot1=pd.pivot_table(factuurlines,index=("C_CLIENT","N_SRT_VOORZ","C_VOORZ","N_PRODUCTCODE"),values="BEDR_FACT__GOEDGEKEURD",aggfunc="sum",margins = True, margins_name= 'Total count')
# altijd de pivot resetten: dataframe weer normaliseren.de velden waarop gegroepeerd wordt zijn als index concated.
df_pivot1=df_pivot1.reset_index()

df_pivot1['iets'] = df_pivot1['groterDan1000']*10
df_bsn=pd.pivot_table(factuurlines,index=("C_CLIENT"),columns="C_VOORZ",values="ORGANISATIE",aggfunc="count")

nieuw veld aan begin dataframe toevoegen

mycol=pd.Index(['VALID_BSN']).append(dflookup1.columns)


#list comprehension in python: Gebruik om het veld teller te verwijderen

juistKolommen = [k for k in df_bsn.columns if k is not 'teller']
df_bsn = df_bsn[juistKolommen]


# Hoe tel ik per bsn het aantal unieke produkten

df_bsn=df_bsn>0
df_bsn=df_bsn*1
df_bsn['teller']=df_bsn[:].sum(axis=1)



df_pivot1.to_csv("produktenJeugd2017.csv",sep= ";",decimal= ",");

pandas dataframe and CSV

Importeer CSV naar Dataframe

import pandas
factuurlines = pd.read_csv("df_debet_geschoond.csv",sep=";",engine='python' )

toelichting engine=python
“Error tokenising data. C error: EOF inside string starting at line”.

There was an erroneous character about 5000 lines into the CSV file that prevented the Pandas CSV parser from reading the entire file. Excel had no problems opening the file, and no amount of saving/re-saving/changing encodings was working. Manually removing the offending line worked, but ultimately, another character 6000 lines further into the file caused the same issue.

The solution was to use the parameter engine=’python’ in the read_csv function call. The Pandas CSV parser can use two different “engines” to parse CSV file – Python or C (default).



Exporteer Daframe naar CSV

 df_debet_geschoond.to_csv("df_debet_geschoond.csv", sep=";")

woensdag 4 juli 2018

PYTHON CODE

lijst = []
lst_credit_not_found = []
for i in range( int(df_credit['SRLNO'].max() +1)):
    df_credit_group = df_credit[df_credit['SRLNO']==i]
    df_debet_tmp=df_debet[~df_debet.ID_FACTUURREGEL.isin(lijst)]
    for index, row in df_credit_group.iterrows():
        rows,columns =df_debet_tmp[df_debet_tmp["C_FACTUUR"]==row["C_FACTUUR"]].shape
        if rows<1:
            lst_credit_not_found.append(df_debet_tmp[df_debet_tmp["C_FACTUUR"]==row["C_FACTUUR"]].iloc[0]["ID_FACTUURREGEL"])
        else:
            lijst.append(df_debet_tmp[df_debet_tmp["C_FACTUUR"]==row["C_FACTUUR"]].iloc[0]["ID_FACTUURREGEL"])


'werkend
lijst = []
for i in range( int(df_credit['SRLNO'].max() +1)):
    df_credit_group = df_credit[df_credit['SRLNO']==i]
    df_debet_tmp=df_debet[~df_debet.ID_FACTUURREGEL.isin(lijst)]
    for index, row in df_credit_group.iterrows():
        lijst.append(df_debet_tmp[df_debet_tmp["C_FACTUUR"]==row["C_FACTUUR"]].iloc[0]["ID_FACTUURREGEL"])

Datums bepalen adhv begin en einddatum in Dataframe

Voorbeeld op losse velden  ####################################################################### # import necessary packages from datetime...