Giter Site home page Giter Site logo

Comments (1)

RobinL avatar RobinL commented on September 26, 2024

At least you get an error if you use it as a Comparison but that wouldn't be guaranteed if using as a ComparisonLevel

example
from splink.datasets import splink_datasets
from splink.duckdb.comparison_library import (
    exact_match,
)
from splink.duckdb.linker import DuckDBLinker

exact_match("surname", term_frequency_adjustments=True, set_to_lowercase=True).as_dict()
df = splink_datasets.fake_1000

settings = {
    "probability_two_random_records_match": 0.01,
    "link_type": "dedupe_only",
    "blocking_rules_to_generate_predictions": ["l.dob = r.dob"],
    "comparisons": [
        {
            "output_column_name": "first_name",
            "comparison_levels": [
                {
                    "sql_condition": '"first_name_l" IS NULL OR "first_name_r" IS NULL',
                    "label_for_charts": "Null",
                    "is_null_level": True,
                },
                {
                    "sql_condition": 'lower("first_name_l") = lower("first_name_r")',
                    "label_for_charts": "Exact match",
                    "tf_adjustment_column": "first_name",
                    "tf_adjustment_weight": 1.0,
                },
                {"sql_condition": "ELSE", "label_for_charts": "All other comparisons"},
            ],
            "comparison_description": "Exact match vs. anything else",
        },
        exact_match("surname"),
        exact_match("dob"),
    ],
    "retain_intermediate_calculation_columns": True,
    "additional_columns_to_retain": ["cluster"],
    "max_iterations": 10,
    "em_convergence": 0.01,
}


linker = DuckDBLinker(df, settings)

linker.profile_columns(
    ["first_name", "surname", "first_name || surname", "concat(city, first_name)"]
)


linker.estimate_u_using_random_sampling(target_rows=1e6)


blocking_rule = "l.dob = r.dob"
linker.estimate_parameters_using_expectation_maximisation(blocking_rule)

linker.predict()
ValueError: Could not find an exact match level for first_name.
An exact match level is required to make a term frequency adjustment on a comparison level that is not an exact match.

Although that's for a different reason than the true error

from splink.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.