예제 #1
0
    def __init__(self, *args, **kwargs):
        log.debug('--> BodSchuze')

        super().__init__(*args, **kwargs)

        self.nacti_bod_schuze()
        self.nacti_bod_stav()

        # TODO: Zúžení na dané volební období

        # Připoj informace o stavu bodu
        suffix = "__bod_stav"
        self.tbl['bod_schuze'] = pd.merge(left=self.tbl['bod_schuze'],
                                          right=self.tbl['bod_stav'],
                                          on='id_bod_stav',
                                          suffixes=("", suffix),
                                          how='left')
        self.drop_by_inconsistency(self.tbl['bod_schuze'],
                                   suffix,
                                   0.1,
                                   'bod_schuze',
                                   'bod_stav',
                                   inplace=True)

        self.nastav_dataframe(self.tbl['bod_schuze'])

        log.debug('<-- BodSchuze')
예제 #2
0
    def __init__(self, *args, **kwargs):
        log.debug("--> TypFunkce")
        super().__init__(*args, **kwargs)

        self.nacti_typ_funkce()

        # Připoj Typu orgánu
        suffix = "__typ_organ"
        self.tbl['typ_funkce'] = pd.merge(left=self.tbl['typ_funkce'],
                                          right=self.tbl['typ_organ'],
                                          on="id_typ_organ",
                                          suffixes=("", suffix),
                                          how='left')
        # Odstraň nedůležité sloupce 'priorita', protože se vzájemně vylučují a nejspíš ani k ničemu nejsou.
        # Tímto se vyhneme varování v 'drop_by_inconsistency'.
        self.tbl['typ_funkce'].drop(
            columns=["priorita", "priorita__typ_organ"], inplace=True)
        self.tbl['typ_funkce'] = self.drop_by_inconsistency(
            self.tbl['typ_funkce'],
            suffix,
            0.1,
            t1_name='typ_funkce',
            t2_name='typ_organ',
            t1_on='id_typ_organ',
            t2_on='id_typ_organ')

        self.nastav_dataframe(self.tbl['typ_funkce'],
                              vyber=[
                                  'id_typ_funkce', 'typ_funkce_cz',
                                  'typ_funkce_en', 'typ_funkce_obecny'
                              ],
                              odstran=['typ_funkce_obecny__ORIG'])

        log.debug("<-- TypFunkce")
예제 #3
0
    def __init__(self, *args, **kwargs):
        log.debug('--> Schuze')

        super().__init__(*args, **kwargs)

        self.nacti_schuze()
        self.nacti_schuze_stav()

        # Zúžení na dané volební období
        if ('id_organ' in self.snemovna) and (self.snemovna.id_organ != -1):
            self.tbl['schuze'] = self.tbl['schuze'][self.tbl['schuze'].id_org
                                                    == self.snemovna.id_organ]

        # Připoj informace o stavu schůze
        suffix = "__schuze_stav"
        self.tbl['schuze'] = pd.merge(left=self.tbl['schuze'],
                                      right=self.tbl['schuze_stav'],
                                      on='id_schuze',
                                      suffixes=("", suffix),
                                      how='left')
        self.drop_by_inconsistency(self.tbl['schuze'],
                                   suffix,
                                   0.1,
                                   'schuze',
                                   'schuze_stav',
                                   inplace=True)

        self.nastav_dataframe(self.tbl['schuze'])

        log.debug('<-- Schuze')
예제 #4
0
    def __init__(self, *args, **kwargs):
        log.debug('--> StenoRecnici')

        super(StenoRecnici, self).__init__(*args, **kwargs)

        self.nacti_steno_recniky()

        # Merge steno
        suffix = "__steno"
        self.tbl['steno_recnici'] = pd.merge(left=self.tbl['steno_recnici'], right=self.tbl['steno'], on='id_steno', suffixes = ("", suffix), how='left')
        self.drop_by_inconsistency(self.tbl['steno_recnici'], suffix, 0.1, "steno_recnici", "steno", inplace=True)

        if self.volebni_obdobi != -1:
            self.tbl['steno_recnici'] = self.tbl['steno_recnici'][self.tbl['steno_recnici'].id_organ == self.snemovna.id_organ]

        # Merge osoby
        suffix = "__osoby"
        self.tbl['steno_recnici'] = pd.merge(left=self.tbl['steno_recnici'], right=self.tbl['osoby'], on='id_osoba', suffixes = ("", suffix), how='left')
        self.drop_by_inconsistency(self.tbl['steno_recnici'], suffix, 0.1, 'steno_rec', 'osoby', inplace=True)

        # Merge bod schuze
        #suffix = "__bod_schuze"
        #self.steno_rec = pd.merge(left=self.steno_rec, right=self.bod_schuze, on='id_bod', suffixes = ("", suffix), how='left')
        #self.steno_rec = self.drop_by_inconsistency(self.steno_rec, suffix, 0.1, 'steno_rec', 'bod_schuze')

        self.nastav_dataframe(self.tbl['steno_recnici'])

        log.debug('<-- StenoRecnici')
예제 #5
0
    def __init__(self, *args, **kwargs):
        log.debug("--> Omluvy")

        super().__init__(*args, **kwargs)

        self.nacti_omluvy()

        # Připoj informace o poslanci
        suffix = "__poslanci"
        self.tbl['omluvy'] = pd.merge(left=self.tbl['omluvy'],
                                      right=self.tbl['poslanci'],
                                      on='id_poslanec',
                                      suffixes=("", suffix),
                                      how='left')
        self.tbl['omluvy'] = self.drop_by_inconsistency(
            self.tbl['omluvy'], suffix, 0.1, 'omluvy', 'poslanci')

        # Připoj Orgány
        suffix = "__organy"
        self.tbl['omluvy'] = pd.merge(left=self.tbl['omluvy'],
                                      right=self.tbl['organy'],
                                      on='id_organ',
                                      suffixes=("", suffix),
                                      how='left')
        self.tbl['omluvy'] = self.drop_by_inconsistency(
            self.tbl['omluvy'], suffix, 0.1, 'omluvy', 'organy')

        # Zúžení na volební období
        self.tbl['omluvy'] = self.tbl['omluvy'][(
            self.tbl['omluvy'].id_parlament == self.snemovna.id_organ)]

        self.nastav_dataframe(self.tbl['omluvy'])

        log.debug("<-- Omluvy")
예제 #6
0
    def __init__(self, stahni=True, *args, **kwargs):
        log.debug("--> PoslanciOsobyBase")

        super().__init__(*args, **kwargs)

        if stahni == True:
            self.stahni_zip_data("poslanci")

        log.debug("<-- PoslanciOsobyBase")
예제 #7
0
    def __init__(self, stahni=True, *args, **kwargs):
        log.debug("--> HlasovaniBase")

        super().__init__(stahni=stahni, *args, **kwargs)

        if stahni == True:
            self.stahni_zip_data(f"hl-{self.volebni_obdobi}ps")

        log.debug("<-- HlasovaniBase")
예제 #8
0
    def __init__(self, *args, **kwargs):
        log.debug('--> Steno')

        super().__init__(*args, **kwargs)

        self.nacti_steno()

        if self.volebni_obdobi != -1:
            self.tbl['steno'] = self.tbl['steno'][self.tbl['steno'].id_organ == self.snemovna.id_organ]

        self.nastav_dataframe(self.tbl['steno'])
예제 #9
0
    def __init__(self, *args, **kwargs):
        log.debug("--> Osoby")
        super(Osoby, self).__init__(*args, **kwargs)

        self.nacti_osoby()
        self.nacti_osoba_extra()

        #suffix='__osoba_extra'
        #self.tbl['osoby'] = pd.merge(left=self.tbl['osoby'], right=self.tbl['osoba_extra'], on="id_osoba", how="left", suffixes=('', suffix))
        #self.drop_by_inconsistency(self.tbl['osoby'], suffix, 0.1, 'hlasovani', 'osoba_extra', inplace=True)

        self.nastav_dataframe(self.tbl['osoby'])

        log.debug("<-- Osoby")
예제 #10
0
파일: Snemovna.py 프로젝트: jarbes/snemovna
    def stahni_zip_data(self, nazev):
        url_prefix = "https://www.psp.cz/eknih/cdrom/opendata/"
        url = url_prefix + nazev + '.zip'
        data_dir = self.parameters['data_dir']

        a = urlparse(url)
        filename = os.path.basename(a.path)
        zip_path = f"{data_dir}/{filename}"
        log.debug(f"SnemovnaZipDataMixin: Nastavuji cestu k zip souboru na: {zip_path}")

        # smaz starý zip soubor, pokud existuje
        if os.path.isfile(zip_path):
            os.remove(zip_path)

        download_and_unzip(url, zip_path, data_dir)
예제 #11
0
    def __init__(self, *args, **kwargs):
        log.debug("--> ZpochybneniPoslancem")

        super().__init__(*args, **kwargs)

        self.nacti_zpochybneni_poslancem()

        # Připojuje se tabulka 'hlasovani', nikoliv 'zpochybneni_hlasovani', protože není možné mapovat řádky 'zpochybneni_hlasovani' na 'zpochybneni_poslancem'. Jedná se zřejmě o nedokonalost datového modelu.
        suffix = "__hlasovani"
        self.tbl['zpochybneni_poslancem'] = pd.merge(
            left=self.tbl['zpochybneni_poslancem'],
            right=self.tbl['hlasovani'],
            on='id_hlasovani',
            suffixes=("", suffix),
            how='left')
        self.drop_by_inconsistency(self.tbl['zpochybneni_poslancem'],
                                   suffix,
                                   0.1,
                                   'zpochybneni_poslancem',
                                   'hlasovani',
                                   inplace=True)

        # Připoj informace o osobe # TODO: Neměli by se připojovat spíš Poslanci než Osoby?
        suffix = "__osoby"
        self.tbl['zpochybneni_poslancem'] = pd.merge(
            left=self.tbl['zpochybneni_poslancem'],
            right=self.tbl['osoby'],
            on='id_osoba',
            suffixes=("", suffix),
            how='left')
        self.drop_by_inconsistency(self.tbl['zpochybneni_poslancem'],
                                   suffix,
                                   0.1,
                                   'zpochybneni_poslancem',
                                   'osoby',
                                   inplace=True)

        id_organ_dle_volebniho_obdobi = self.tbl['organy'][
            (self.tbl['organy'].nazev_organ_cz == 'Poslanecká sněmovna')
            & (self.tbl['organy'].od_organ.dt.year == self.volebni_obdobi
               )].iloc[0].id_organ
        self.tbl['zpochybneni_poslancem'] = self.tbl['zpochybneni_poslancem'][
            self.tbl['zpochybneni_poslancem'].id_organ ==
            id_organ_dle_volebniho_obdobi]

        self.nastav_dataframe(self.tbl['zpochybneni_poslancem'])

        log.debug("<-- ZpochybneniPoslancem")
예제 #12
0
    def __init__(self, *args, **kwargs):
        log.debug("--> ZmatecneHlasovani")

        super().__init__(*args, **kwargs)
        self.nacti_zmatecne_hlasovani()

        suffix = "__hlasovani"
        self.tbl['zmatecne'] = pd.merge(left=self.tbl['zmatecne'],
                                        right=self.tbl['hlasovani'],
                                        on='id_hlasovani',
                                        suffixes=("", suffix),
                                        how='left')
        self.tbl['zmatecne'] = self.drop_by_inconsistency(
            self.tbl['zmatecne'], suffix, 0.1, 'zmatecne', 'hlasovani')

        self.nastav_dataframe(self.tbl['zmatecne'])

        log.debug("<-- ZmatecneHlasovani")
예제 #13
0
    def __init__(self, *args, **kwargs):
        log.debug('--> StenoBod')

        super().__init__(*args, **kwargs)

        self.nacti_steno_bod()

        # Merge steno
        suffix = "__steno"
        self.tbl['steno_bod'] = pd.merge(left=self.tbl['steno_bod'], right=self.tbl['steno'], on='id_steno', suffixes = ("", suffix), how='left')
        self.drop_by_inconsistency(self.tbl['steno_bod'], suffix, 0.1, "steno_bod", "steno")

        if self.volebni_obdobi != -1:
            self.tbl['steno_bod'] = self.tbl['steno_bod'][self.tbl['steno_bod'].id_organ == self.snemovna.id_organ]

        self.nastav_dataframe(self.tbl['steno_bod'])

        log.debug('<-- StenoBod')
예제 #14
0
파일: utility.py 프로젝트: jarbes/snemovna
def pretypuj(df, header, name=None, inplace=False):
    if inplace:
        new_df = df
    else:
        new_df = df.copy()

    if name is not None:
        log.debug(f"Přetypování v tabulce '{name}'.")
    for col in df.columns:
        if col in header:
            #log.debug(f"Přetypovávám sloupec: '{col}'.")
            if isinstance(header[col], str):
                new_df[col] = df[col].astype(header[col])
            elif isinstance(header[col], MItem):
                new_df[col] = df[col].astype(header[col].typ)
            else:
                log.error(
                    f"Chyba: Neznámý formát přetypování. Sloupec '{col}' nebylo možné přetypovat."
                )
    return new_df
예제 #15
0
파일: utility.py 프로젝트: jarbes/snemovna
def download_and_unzip(url, zip_file_name, data_dir):
    log.info(f"Stahuji '{url}'.")
    log.debug(f"Vytvářím adresář: '{data_dir}'")
    Path(data_dir).mkdir(parents=True, exist_ok=True)

    log.debug(f"Stahuji data z: '{url}'")
    r = requests.get(url)
    with open(zip_file_name, 'wb') as f:
        f.write(r.content)
    log.debug(
        f"Status: {r.status_code}, headers: {r.headers['content-type']}, encoding: {r.encoding}"
    )

    log.debug(f"Rozbaluji data do: '{data_dir}'")
    with zipfile.ZipFile(zip_file_name, 'r') as zip_ref:
        zip_ref.extractall(data_dir)
예제 #16
0
    def __init__(self, *args, **kwargs):
        log.debug("--> Funkce")
        super().__init__(*args, **kwargs)

        self.nacti_funkce()

        # Zúžení
        self.vyber_platne_funkce()

        # Připoj Orgány
        suffix = "__organy"
        self.tbl['funkce'] = pd.merge(left=self.tbl['funkce'],
                                      right=self.tbl['organy'],
                                      on='id_organ',
                                      suffixes=("", suffix),
                                      how='left')
        self.tbl['funkce'] = self.drop_by_inconsistency(
            self.tbl['funkce'], suffix, 0.1, 'funkce', 'organy')

        # Připoj Typ funkce
        suffix = "__typ_funkce"
        self.tbl['funkce'] = pd.merge(left=self.tbl['funkce'],
                                      right=self.tbl['typ_funkce'],
                                      on="id_typ_funkce",
                                      suffixes=("", suffix),
                                      how='left')

        # Fix the knows inconsistency in data
        x = self.tbl['funkce']
        idx = x[(x.id_typ_organ == 42)
                & (x.id_typ_organ__typ_funkce == 15)].index
        log.debug(
            f"Řešení známé nekonzistence v datech: Upřednostňuji sloupce z tabulky 'funkce' před 'typ_funkce' pro {len(idx)} hodnot."
        )
        to_update = [
            'id_typ_organ', 'typ_id_typ_organ', 'nazev_typ_organ_cz',
            'nazev_typ_organ_en', 'typ_organ_obecny'
        ]
        for i in to_update:
            x.at[idx, i + '__typ_funkce'] = x.loc[idx][i]

        self.tbl['funkce'] = self.drop_by_inconsistency(self.tbl['funkce'],
                                                        suffix,
                                                        0.1,
                                                        'funkce',
                                                        'typ_funkce',
                                                        t1_on='id_typ_funkce',
                                                        t2_on='id_typ_funkce')

        if self.volebni_obdobi != -1:
            assert len(
                self.tbl['funkce'][self.tbl['funkce'].id_organ.isna()]) == 0

        self.nastav_dataframe(self.tbl['funkce'])

        log.debug("<-- Funkce")
예제 #17
0
    def __init__(self, *args, **kwargs):
        log.debug("--> Organy")
        super().__init__(*args, **kwargs)

        self.nacti_organy()

        # Připoj Typu orgánu
        suffix = "__typ_organ"
        self.tbl['organy'] = pd.merge(left=self.tbl['organy'],
                                      right=self.tbl['typ_organ'],
                                      on="id_typ_organ",
                                      suffixes=("", suffix),
                                      how='left')
        # Odstraň nedůležité sloupce 'priorita', protože se vzájemně vylučují a nejspíš k ničemu nejsou.
        # Tímto se vyhneme varování funkce 'drop_by_inconsistency.
        self.tbl['organy'].drop(columns=["priorita", "priorita__typ_organ"],
                                inplace=True)
        self.tbl['organy'] = self.drop_by_inconsistency(
            self.tbl['organy'], suffix, 0.1, 'organy', 'typ_organ')

        # Nastav volební období, pokud chybí
        if self.volebni_obdobi == None:
            self.volebni_obdobi = self._posledni_snemovna().od_organ.year
            log.debug(
                f"Nastavuji začátek volebního období na: {self.volebni_obdobi}."
            )

        if self.volebni_obdobi != -1:
            x = self.tbl['organy'][
                (self.tbl['organy'].nazev_organ_cz == 'Poslanecká sněmovna')
                & (self.tbl['organy'].od_organ.dt.year == self.volebni_obdobi)]
            if len(x) == 1:
                self.snemovna = x.iloc[0]
            else:
                log.error(
                    'Bylo nalezeno více sněmoven pro dané volební období!')
                raise ValueError

        self.tbl['organy'] = self.vyber_platne_organy()
        self.nastav_dataframe(self.tbl['organy'])

        log.debug("<-- Organy")
예제 #18
0
파일: Snemovna.py 프로젝트: jarbes/snemovna
    def __init__(self, volebni_obdobi=None, data_dir='./data', *args, **kwargs):
        log.debug("--> SnemovnaDataFrame")
        log.debug(f"Base kwargs: {kwargs}")
        super().__init__(*args, **kwargs)
        self._metadata = [
            "meta", 'tbl', 'parameters',
            "volební období", "snemovna", "tzn"
        ]

        self.meta = SnemovnaMeta(
            index_name='sloupec',
            dtypes=dict(popis='string', tabulka='string', vlastni='bool', aktivni='bool'),
            defaults=dict(popis=None, tabulka=None, vlastni=None, aktivni=None),
        )
        self.tbl = {}
        self.volebni_obdobi = volebni_obdobi
        self.snemovna = None
        self.tzn = pytz.timezone('Europe/Prague')

        self.parameters = {}
        self.parameters['data_dir'] = data_dir

        log.debug("<-- SnemovnaDataFrame")
예제 #19
0
    def __init__(self, stahni=True, limit=-1, soubezne_stahovani_max=12, soubezne_zpracovani_max=-1, *args, **kwargs):
        log.debug('--> StenoTexty')

        super().__init__(stahni=stahni, *args, **kwargs)

        self.parameters['limit'] = limit
        self.parameters['soubezne_stahovani_max'] = soubezne_stahovani_max
        self.parameters['soubezne_zpracovani_max'] = soubezne_zpracovani_max

        if stahni == True:
            self.stahni_steno_texty()

        self.nacti_steno_texty()

        # Doplneni recnika, který mluvil na konci minulého stenozáznamu (přetahujícího řečníka).
        # Přetahující řečník nemá v aktuálním stenozáznamu identifikátor, ale zpravidla (v 99% případů) byl zmíněn v některém z minulých stenozáznamů (turns).
        # Tento stenozáznam je nutné vyhledat a uložit jeho číslo ('id_turn_surrogate') a číslo řečníka ('id_rec_surrogate').
        # V joinu se 'steno_rec' se pak použije 'id_rec_surrogate' místo 'id_rec' a 'id_turn_surrogate' místo 'id_turn' pro získání informací o osobě etc.
        # Pozor: naopak informace o času proslovu jsou navázány na 'turn'.
        self.tbl['steno_texty'].loc[self.tbl['steno_texty'].id_rec.isna(), 'turn_surrogate'] = np.nan
        self.tbl['steno_texty'].loc[~self.tbl['steno_texty'].id_rec.isna(), 'turn_surrogate'] = self.tbl['steno_texty'].turn
        self.tbl['steno_texty']['turn_surrogate'] = self.tbl['steno_texty'].groupby("schuze")['turn_surrogate'].ffill().astype('Int64')
        self.tbl['steno_texty']['id_rec_surrogate'] = self.tbl['steno_texty']['id_rec']
        self.meta.nastav_hodnotu('turn_surrogate', dict(popis='Číslo stenozáznamu (turn), ve kterém byla nalezena identifikace řečníka.', tabulka='df', vlastni=True))

        self.tbl['steno_texty']['id_rec_surrogate'] = self.tbl['steno_texty'].groupby("schuze")['id_rec_surrogate'].ffill().astype('Int64')
        self.meta.nastav_hodnotu('id_rec_surrogate', dict(popis='Identifikace řečníka na základě zpětmého hledání v stenozáznamech (turn).', tabulka='df', vlastni=True))

        # připoj osobu ze steno_rec ... we simply add id_osoba to places where it's missing
        m = pd.merge(left=self.tbl['steno_texty'], right=self.tbl['steno_recnici'][['schuze', "turn", "aname", 'id_osoba']], left_on=["schuze", "turn_surrogate", "id_rec_surrogate"], right_on=["schuze", "turn", "aname"], how="left")
        ids = m[m.id_osoba_x.eq(m.id_osoba_y)].index
        ne_ids = set(m.index)-set(ids)
        assert m[m.index.isin(ne_ids) & (~m.id_osoba_x.isna())].size / m[m.index.isin(ne_ids)].size < 0.1 # This is a consistency sanity check
        m['id_osoba'] = m['id_osoba_y']
        m['turn'] = m['turn_x']
        self.tbl['steno_texty'] = m.drop(labels=['id_osoba_x', 'id_osoba_y', 'turn_y', 'turn_x', 'aname'], axis=1)

        # Merge steno_recnici
        suffix = "__steno_recnici"
        self.tbl['steno_texty'] = pd.merge(left=self.tbl['steno_texty'], right=self.tbl['steno_recnici'], left_on=["schuze", "turn_surrogate", "id_rec_surrogate"], right_on=['schuze', 'turn', 'aname'], suffixes = ("", suffix), how='left')
        self.tbl['steno_texty'] = self.tbl['steno_texty'].drop(labels=['turn__steno_recnici'], axis=1) # this inconsistency comes from the 'turn-fix'
        self.drop_by_inconsistency(self.tbl['steno_texty'], suffix, 0.1, 'steno_texty', 'steno_recnici', inplace=True)

        # Merge osoby
        suffix = "__osoby"
        self.tbl['steno_texty'] = pd.merge(left=self.tbl['steno_texty'], right=self.tbl['osoby'], on='id_osoba', suffixes = ("", suffix), how='left')
        self.drop_by_inconsistency(self.tbl['steno_texty'], suffix, 0.1, 'steno_texty', 'osoby', inplace=True)

        ## Merge zarazeni_osoby
        zarazeni_osoby = self.tbl['zarazeni_osoby']
        poslanci = zarazeni_osoby[(zarazeni_osoby.do_o.isna()) & (zarazeni_osoby.id_organ==self.snemovna.id_organ) & (zarazeni_osoby.cl_funkce=='členství')] # všichni poslanci
        strany = zarazeni_osoby[(zarazeni_osoby.id_osoba.isin(poslanci.id_osoba)) & (zarazeni_osoby.nazev_typ_organ_cz == "Klub") & (zarazeni_osoby.do_o.isna()) & (zarazeni_osoby.cl_funkce=='členství')]
        self.tbl['steno_texty'] = pd.merge(self.tbl['steno_texty'], strany[['id_osoba', 'zkratka']], on='id_osoba', how="left")

        ## Merge Strana
        organy = self.tbl['organy']
        snemovna_id = organy[organy.nazev_organ_cz=="Poslanecká sněmovna"].sort_values(by="id_organ").iloc[-1].id_organ
        snemovna_od = pd.to_datetime(organy[organy.id_organ == snemovna_id].iloc[0].od_organ)#.tz_localize(self.tzn)
        snemovna_do = pd.to_datetime(organy[organy.id_organ == snemovna_id].iloc[0].do_organ)#.tz_localize(self.tzn)

        snemovna_cond = (zarazeni_osoby.od_o >= snemovna_od) & (zarazeni_osoby.nazev_typ_organ_cz == "Klub") & (zarazeni_osoby.cl_funkce=='členství')
        if pd.isnull(snemovna_do) == False:
            snemovna_cond = snemovna_cond | (zarazeni_osoby.do_o >= snemovna_do)
        s = zarazeni_osoby[snemovna_cond].groupby('id_osoba').size().sort_values()
        prebehlici = s[s > 1]
        #print("prebehlici: ", prebehlici)

        for id_prebehlik in prebehlici.index:
            for idx, row in zarazeni_osoby[ snemovna_cond & (zarazeni_osoby.id_osoba == id_prebehlik)].iterrows():
                od, do, id_organ, zkratka =  row['od_o'], row['do_o'], row['id_organ'], row['zkratka']
                #print(id_prebehlik, od, do, id_organ, zkratka)
                self.tbl['steno_texty'].zkratka.mask((self.tbl['steno_texty'].date >= od) & (self.tbl['steno_texty'].date <= do) & (self.tbl['steno_texty'].id_osoba == id_prebehlik), zkratka, inplace=True)

        to_drop = ['zmena']
        self.tbl['steno_texty'].drop(labels=to_drop, inplace=True, axis=1)

        self.nastav_dataframe(self.tbl['steno_texty'])

        log.debug('<-- StenoTexty')
예제 #20
0
    def __init__(self, *args, **kwargs):
        log.debug("--> Poslanci")

        super().__init__(*args, **kwargs)

        self.nacti_poslanci_pkgps()
        self.nacti_poslance()

        # Zúžení na dané volební období
        if self.volebni_obdobi != -1:
            self.tbl['poslanci'] = self.tbl['poslanci'][
                self.tbl['poslanci'].id_organ == self.snemovna.id_organ]

        # Připojení informace o osobě, např. jméno a příjmení
        suffix = "__osoby"
        self.tbl['poslanci'] = pd.merge(left=self.tbl['poslanci'],
                                        right=self.tbl['osoby'],
                                        on='id_osoba',
                                        suffixes=("", suffix),
                                        how='left')
        self.tbl['poslanci'] = self.drop_by_inconsistency(
            self.tbl['poslanci'], suffix, 0.1, 'poslanci', 'osoby')

        # Připoj informace o kanceláři
        suffix = "__poslanci_pkgps"
        self.tbl['poslanci'] = pd.merge(left=self.tbl['poslanci'],
                                        right=self.tbl['poslanci_pkgps'],
                                        on='id_poslanec',
                                        suffixes=("", suffix),
                                        how='left')
        self.drop_by_inconsistency(self.tbl['poslanci'],
                                   suffix,
                                   0.1,
                                   'poslanci',
                                   'poslanci_pkgps',
                                   inplace=True)

        # Připoj informace o kandidátce
        suffix = "__organy"
        self.tbl['poslanci'] = pd.merge(
            left=self.tbl['poslanci'],
            right=self.tbl['organy'][["id_organ", "nazev_organ_cz",
                                      "zkratka"]],
            left_on='id_kandidatka',
            right_on='id_organ',
            suffixes=("", suffix),
            how='left')
        self.tbl['poslanci'].drop(columns=['id_organ__organy'], inplace=True)
        self.tbl['poslanci'].rename(columns={
            'nazev_organ_cz': 'nazev_kandidatka_cz',
            'zkratka': 'zkratka_kandidatka'
        },
                                    inplace=True)
        self.drop_by_inconsistency(self.tbl['poslanci'],
                                   suffix,
                                   0.1,
                                   'poslanci',
                                   'organy',
                                   t1_on='id_organ',
                                   t2_on='id_kandidatka',
                                   inplace=True)
        self.meta.nastav_hodnotu(
            'nazev_kandidatka_cz', {
                "popis":
                'Název strany, za kterou poslanec kandidoval, viz Organy:nazev_organ_cz',
                'tabulka': 'df',
                'vlastni': True
            })
        self.meta.nastav_hodnotu(
            'zkratka_kandidatka', {
                "popis":
                'Zkratka strany, za kterou poslanec kandidoval, viz Organy:nazev_organ_cz',
                'tabulka': 'df',
                'vlastni': True
            })

        # Připoj informace o kraji
        suffix = "__organy"
        self.tbl['poslanci'] = pd.merge(
            left=self.tbl['poslanci'],
            right=self.tbl['organy'][["id_organ", "nazev_organ_cz",
                                      "zkratka"]],
            left_on='id_kraj',
            right_on='id_organ',
            suffixes=("", suffix),
            how='left')
        self.tbl['poslanci'].drop(columns=['id_organ__organy'], inplace=True)
        self.tbl['poslanci'].rename(columns={
            'nazev_organ_cz': 'nazev_kraj_cz',
            'zkratka': 'zkratka_kraj'
        },
                                    inplace=True)
        self.drop_by_inconsistency(self.tbl['poslanci'],
                                   suffix,
                                   0.1,
                                   'poslanci',
                                   'organy',
                                   t1_on='id_kraj',
                                   t2_on='id_organ',
                                   inplace=True)
        self.meta.nastav_hodnotu(
            'nazev_kraj_cz', {
                "popis":
                'Název kraje, za který poslanec kandidoval, viz Organy:nazev_organ_cz',
                'tabulka': 'df',
                'vlastni': True
            })
        self.meta.nastav_hodnotu(
            'zkratka_kraj', {
                "popis":
                'Zkratka kraje, za který poslanec kandidoval, viz Organy:nazev_organ_cz',
                'tabulka': 'df',
                'vlastni': True
            })

        # Pripoj data nastoupení do parlamentu, příp. odstoupení z parlamentu
        parlament = self.tbl['zarazeni_osoby'][
            (self.tbl['zarazeni_osoby'].id_osoba.isin(
                self.tbl['poslanci'].id_osoba))
            & (self.tbl['zarazeni_osoby'].nazev_typ_organ_cz == "Parlament") &
            (self.tbl['zarazeni_osoby'].cl_funkce == 'členství')].copy()
        #parlament = parlament.sort_values(['id_osoba', 'od_o']).groupby('id_osoba').tail(1).reset_index()
        parlament = parlament.sort_values(
            ['id_osoba', 'od_o']).groupby('id_osoba').tail(1).reset_index()
        parlament.rename(columns={
            'id_organ': 'id_parlament',
            'od_o': 'od_parlament',
            'do_o': 'do_parlament'
        },
                         inplace=True)
        self.tbl['poslanci'] = pd.merge(self.tbl['poslanci'],
                                        parlament[[
                                            'id_osoba', 'id_parlament',
                                            'od_parlament', 'do_parlament'
                                        ]],
                                        on='id_osoba',
                                        how="left")
        self.tbl['poslanci'] = self.drop_by_inconsistency(
            self.tbl['poslanci'], suffix, 0.1, 'poslanci', 'zarazeni_osoby')
        self.meta.nastav_hodnotu(
            'id_parlament', {
                "popis":
                'Identifikátor parlamentu, jehož byli poslanci členy, viz Organy:id_organ',
                'tabulka': 'df',
                'vlastni': True
            })
        self.meta.nastav_hodnotu(
            'od_parlament', {
                "popis":
                'Datum začátku zařazení poslanců do parlamentu, viz Organy:od_o',
                'tabulka': 'df',
                'vlastni': True
            })
        self.meta.nastav_hodnotu(
            'do_parlament', {
                "popis":
                'Datum konce zařazení poslanců do parlamentu, viz Organy:do_o',
                'tabulka': 'df',
                'vlastni': True
            })

        # Připoj informace o posledním poslaneckém klubu z 'zarazeni_osoby'.
        kluby = self.tbl['zarazeni_osoby'][
            (self.tbl['zarazeni_osoby'].id_osoba.isin(
                self.tbl['poslanci'].id_osoba))
            & (self.tbl['zarazeni_osoby'].nazev_typ_organ_cz == "Klub") &
            (self.tbl['zarazeni_osoby'].cl_funkce == 'členství')].copy()
        kluby = kluby.sort_values(
            ['id_osoba', 'od_o']).groupby('id_osoba').tail(1).reset_index()
        kluby.rename(columns={
            'id_organ': 'id_klub',
            'nazev_organ_cz': 'nazev_klub_cz',
            'zkratka': 'zkratka_klub',
            'od_o': 'od_klub',
            'do_o': 'do_klub'
        },
                     inplace=True)
        self.tbl['poslanci'] = pd.merge(self.tbl['poslanci'],
                                        kluby[[
                                            'id_osoba', 'id_klub',
                                            'nazev_klub_cz', 'zkratka_klub',
                                            'od_klub', 'do_klub'
                                        ]],
                                        on='id_osoba',
                                        how="left")
        self.tbl['poslanci'] = self.drop_by_inconsistency(
            self.tbl['poslanci'], suffix, 0.1, 'poslanci', 'zarazeni_osoby')
        self.meta.nastav_hodnotu(
            'id_klub', {
                "popis":
                'Identifikátor posledního klubu, do něhož byli poslanci zařazeni, viz Organy:id_organ',
                'tabulka': 'df',
                'vlastni': True
            })
        self.meta.nastav_hodnotu(
            'nazev_klub_cz', {
                "popis":
                'Název posledního klubu, do něhož byli poslanci zařazeni, viz Organy:nazev_organ_cz',
                'tabulka': 'df',
                'vlastni': True
            })
        self.meta.nastav_hodnotu(
            'zkratka_klub', {
                "popis":
                'Zkratka posledního klubu, do něhož byli poslanci zařazeni, viz Organy:zkratka',
                'tabulka': 'df',
                'vlastni': True
            })
        self.meta.nastav_hodnotu(
            'od_klub', {
                "popis":
                'Datum začátku zařazení poslanců do posledního klubu, viz Organy:od_o',
                'tabulka': 'df',
                'vlastni': True
            })
        self.meta.nastav_hodnotu(
            'do_klub', {
                "popis":
                'Datum konce zařazení poslanců do posledního klubu, viz Organy:do_o',
                'tabulka': 'df',
                'vlastni': True
            })

        self.nastav_dataframe(self.tbl['poslanci'], odstran=['pohlavi__ORIG'])

        log.debug("<-- Poslanci")
예제 #21
0
    def __init__(self, *args, **kwargs):
        log.debug("--> ZarazeniOsoby")

        super().__init__(*args, **kwargs)

        self.nacti_zarazeni_osoby()

        # Připoj Osoby
        suffix = "__osoby"
        self.tbl['zarazeni_osoby'] = pd.merge(left=self.tbl['zarazeni_osoby'],
                                              right=self.tbl['osoby'],
                                              on='id_osoba',
                                              suffixes=("", suffix),
                                              how='left')
        self.tbl['zarazeni_osoby'] = self.drop_by_inconsistency(
            self.tbl['zarazeni_osoby'], suffix, 0.1, 'zarazeni_osoby', 'osoby')

        # Připoj Organy
        suffix = "__organy"
        sub1 = self.tbl['zarazeni_osoby'][self.tbl['zarazeni_osoby'].cl_funkce
                                          == 'členství'].reset_index()
        if self.volebni_obdobi == -1:
            m1 = pd.merge(left=sub1,
                          right=self.tbl['organy'],
                          left_on='id_of',
                          right_on='id_organ',
                          suffixes=("", suffix),
                          how='left')
        else:
            # Pozor, how='left' nestačí, 'inner' se podílí na zúžení na danou sněmovnu
            m1 = pd.merge(left=sub1,
                          right=self.tbl['organy'],
                          left_on='id_of',
                          right_on='id_organ',
                          suffixes=("", suffix),
                          how='inner')
        m1 = self.drop_by_inconsistency(m1, suffix, 0.1, 'zarazeni_osoby',
                                        'organy')

        # Připoj Funkce
        sub2 = self.tbl['zarazeni_osoby'][self.tbl['zarazeni_osoby'].cl_funkce
                                          == 'funkce'].reset_index()
        if self.volebni_obdobi == -1:
            m2 = pd.merge(left=sub2,
                          right=self.tbl['funkce'],
                          left_on='id_of',
                          right_on='id_funkce',
                          suffixes=("", suffix),
                          how='left')
        else:
            # Pozor, how='left' nestačí, 'inner' se podílí na zúžení na danou sněmovnu
            m2 = pd.merge(left=sub2,
                          right=self.tbl['funkce'],
                          left_on='id_of',
                          right_on='id_funkce',
                          suffixes=("", suffix),
                          how='inner')
        m2 = self.drop_by_inconsistency(m2, suffix, 0.1, 'zarazeni_osoby',
                                        'funkce')

        self.tbl['zarazeni_osoby'] = pd.concat(
            [m1, m2], axis=0,
            ignore_index=True).set_index('index').sort_index()

        # Zúžení na dané volební období
        self.vyber_platne_zarazeni_osoby()

        self.nastav_dataframe(self.tbl['zarazeni_osoby'])

        log.debug("<-- ZarazeniOsoby")
예제 #22
0
 def __init__(self, stahni=True, *args, **kwargs):
     log.debug("--> SchuzeBase")
     super().__init__(stahni=stahni, *args, **kwargs)
     if stahni == True:
         self.stahni_zip_data("schuze")
     log.debug("<-- SchuzeBase")
예제 #23
0
    def __init__(self, *args, **kwargs):
        log.debug("--> Hlasovani")

        super().__init__(*args, **kwargs)

        self.nacti_hlasovani()
        self.nacti_zmatecne_hlasovani()
        self.nacti_zpochybneni_hlasovani()
        self.nacti_hlasovani_vazba_stenozaznam()

        # Zúžení dat na zvolené volební období. Tohle je asi nejjednodušší způsob.
        min_id = self.tbl['hlasovani'].id_hlasovani.min()
        max_id = self.tbl['hlasovani'].id_hlasovani.max()
        self.tbl['zmatecne'] = self.tbl['zmatecne'][
            (self.tbl['zmatecne'].id_hlasovani >= min_id)
            & (self.tbl['zmatecne'].id_hlasovani <= max_id)]
        self.tbl['zpochybneni'] = self.tbl['zpochybneni'][
            (self.tbl['zpochybneni'].id_hlasovani >= min_id)
            & (self.tbl['zpochybneni'].id_hlasovani <= max_id)]
        self.tbl['hlasovani_vazba_stenozaznam'] = self.tbl[
            'hlasovani_vazba_stenozaznam'][
                (self.tbl['hlasovani_vazba_stenozaznam'].id_hlasovani >= min_id
                 )
                & (self.tbl['hlasovani_vazba_stenozaznam'].id_hlasovani <=
                   max_id)]

        # Přidání indikátorů
        self.tbl['hlasovani']['je_zpochybneni'] = self.tbl[
            'hlasovani'].id_hlasovani.isin(
                self.tbl['zpochybneni'].id_hlasovani.unique())
        self.meta.nastav_hodnotu(
            'je_zpochybneni',
            dict(popis='Indikátor zpochybnění hlasování',
                 tabulka='df',
                 vlastni=True))

        self.tbl['hlasovani']['je_zmatecne'] = self.tbl[
            'hlasovani'].id_hlasovani.isin(
                self.tbl['zmatecne'].id_hlasovani.unique())
        self.meta.nastav_hodnotu(
            'je_zmatecne',
            dict(popis='Indikátor zmatečného hlasování',
                 tabulka='df',
                 vlastni=True))

        # Připojení informací o stenozaznamu. Pozor, nemusí být aktuální. Například pro snemovnu 2017 momentálně (16.2.2021) data chybí.
        self.tbl['hlasovani']['ma_stenozaznam'] = self.tbl[
            'hlasovani'].id_hlasovani.isin(
                self.tbl['hlasovani_vazba_stenozaznam'].id_hlasovani.unique())
        self.meta.nastav_hodnotu(
            'ma_stenozaznam',
            dict(popis='Indikátor existence stenozáznamu',
                 tabulka='df',
                 vlastni=True))

        suffix = '__hlasovani_vazba_stenozaznam'
        self.tbl['hlasovani'] = pd.merge(
            left=self.tbl['hlasovani'],
            right=self.tbl['hlasovani_vazba_stenozaznam'],
            on="id_hlasovani",
            how="left",
            suffixes=('', suffix))
        self.drop_by_inconsistency(self.tbl['hlasovani'],
                                   suffix,
                                   0.1,
                                   'hlasovani',
                                   'hlasovani_vazba_stenozaznam',
                                   inplace=True)

        self.nastav_dataframe(self.tbl['hlasovani'],
                              odstran=[
                                  'datum__ORIG', 'druh_hlasovani__ORIG',
                                  'vysledek__ORIG', 'typ__ORIG'
                              ])
        # Uprav informace, které se přepsaly při načítání tabulek
        self.meta.loc['id_hlasovani', 'tabulka'] = 'hlasovani'

        log.debug("<-- Hlasovani")
예제 #24
0
    def __init__(self, *args, **kwargs):
        log.debug("--> HlasovaniPoslance")

        super().__init__(*args, **kwargs)

        self.nacti_hlasovani_poslance()

        # Připoj Poslance
        self.tbl['hlasovani_poslance'] = pd.merge(
            left=self.tbl['hlasovani_poslance'],
            right=self.tbl['poslanci'],
            on="id_poslanec",
            suffixes=("", "__poslanci"),
            how='left')
        self.drop_by_inconsistency(self.tbl['hlasovani_poslance'],
                                   "__poslanci",
                                   0.1,
                                   'hlasovani_poslance',
                                   'poslanci',
                                   inplace=True)
        self.tbl['hlasovani_poslance'] = self.tbl['hlasovani_poslance'][
            self.tbl['hlasovani_poslance'].id_parlament ==
            self.snemovna.id_organ]

        # Připoj Hlasovani
        hlasovani_columns = [
            'id_hlasovani', 'schuze', 'cislo', 'bod', 'cas', 'nazev_dlouhy',
            'datum', 'bod__KAT', 'druh_hlasovani', 'je_zpochybneni',
            'je_zmatecne'
        ]
        self.tbl['hlasovani_poslance'] = pd.merge(
            left=self.tbl['hlasovani_poslance'],
            right=self.tbl['hlasovani'][hlasovani_columns],
            on="id_hlasovani",
            suffixes=("", "__hlasovani"),
            how='left')
        self.drop_by_inconsistency(self.tbl['hlasovani_poslance'],
                                   "__hlasovani",
                                   0.1,
                                   'hlasovani_poslance',
                                   'hlasovani',
                                   inplace=True)

        ## Merge zarazeni_osoby
        zarazeni_osoby = self.tbl['zarazeni_osoby']
        poslanci = zarazeni_osoby[
            (zarazeni_osoby.do_o.isna()) &
            (zarazeni_osoby.id_organ == self.snemovna.id_organ) &
            (zarazeni_osoby.cl_funkce == 'členství')]  # všichni poslanci
        strany = zarazeni_osoby[
            (zarazeni_osoby.id_osoba.isin(poslanci.id_osoba))
            & (zarazeni_osoby.nazev_typ_organ_cz == "Klub") &
            (zarazeni_osoby.do_o.isna()) &
            (zarazeni_osoby.cl_funkce == 'členství')]
        self.tbl['hlasovani_poslance'] = pd.merge(
            self.tbl['hlasovani_poslance'],
            strany[['id_osoba', 'zkratka']],
            on='id_osoba',
            how="left")
        ## Merge Strana
        zarazeni_osoby = self.tbl['zarazeni_osoby']
        snemovna_od = self.snemovna.od_organ
        snemovna_do = self.snemovna.do_organ

        snemovna_cond = (zarazeni_osoby.od_o >= snemovna_od) & (
            zarazeni_osoby.nazev_typ_organ_cz
            == "Klub") & (zarazeni_osoby.cl_funkce == 'členství')
        if pd.isnull(snemovna_do) == False:
            snemovna_cond = snemovna_cond | (zarazeni_osoby.do_o >=
                                             snemovna_do)
        s = zarazeni_osoby[snemovna_cond].groupby(
            'id_osoba').size().sort_values()
        prebehlici = s[s > 1]
        #print("prebehlici: ", prebehlici)

        for id_prebehlik in prebehlici.index:
            for idx, row in zarazeni_osoby[snemovna_cond & (
                    zarazeni_osoby.id_osoba == id_prebehlik)].iterrows():
                od, do, id_organ, zkratka = row['od_o'], row['do_o'], row[
                    'id_organ'], row['zkratka']
                #print(id_prebehlik, od, do, id_organ, zkratka)
                self.tbl['hlasovani_poslance'].zkratka.mask(
                    (self.tbl['hlasovani_poslance'].datum >= od) &
                    (self.tbl['hlasovani_poslance'].datum <= do) &
                    (self.tbl['hlasovani_poslance'].id_osoba == id_prebehlik),
                    zkratka,
                    inplace=True)

        self.nastav_dataframe(self.tbl['hlasovani_poslance'],
                              vyber=[
                                  'id_hlasovani', 'nazev_dlouhy', 'vysledek',
                                  'id_poslanec', 'id_osoba', 'pred', 'jmeno',
                                  'prijmeni', 'za'
                              ],
                              odstran=[
                                  'vysledek__ORIG', 'pohlavi__ORIG',
                                  'od_parlament', 'do_parlament', 'web',
                                  'ulice', 'obec', 'psc', 'telefon', 'fax',
                                  'psp_telefon', 'email', 'facebook', 'foto',
                                  'zmena', 'umrti', 'adresa', 'sirka', 'delka'
                              ])

        log.debug("<-- HlasovaniPoslance")