<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def writearff(data, filename, relation_name=None, index=True):
 """Write ARFF file Parameters data : :class:`pandas.DataFrame` DataFrame containing data filename : string or file-like object Path to ARFF file or file-like object. In the latter case, the handle is closed by calling this function. relation_name : string, optional, default: "pandas" Name of relation in ARFF file. index : boolean, optional, default: True Write row names (index) """

    if isinstance(filename, str):
        fp = open(filename, 'w')

        if relation_name is None:
            relation_name = os.path.basename(filename)
    else:
        fp = filename

        if relation_name is None:
            relation_name = "pandas"

    try:
        data = _write_header(data, fp, relation_name, index)
        fp.write("\n")
        _write_data(data, fp)
    finally:
        fp.close()