def _write_language_file(self, out_file):
        coords = Coordinates()
        langs = defaultdict(lambda: {'count': 0, 'group': None})
        for year, entry_list in self.groups:
            if year >= START_YEAR and year <= END_YEAR:
                entry_list = list(entry_list)
                for entry in entry_list:
                    langs[entry.language]['count'] += 1
                    langs[entry.language]['group'] = entry.language_group_initial()

        for language in langs.keys():
            # Number of possible points (between 3 and 30, depending on
            #  the frequency of the language)
            num_points = int(langs[language]['count'] / 5)
            num_points = max(4, min(num_points, 30))
            # Select a bunch of random points within the language's geo region
            langs[language]['coords'] = [coords.randomize(
                language, decimalPlaces=2) for i in range(num_points)]

        langs2 = []
        for language, vals in langs.items():
            langs2.append({'l': language,
                           'g': vals['group'],
                           'c': vals['coords']})
        with open(out_file, 'w') as filehandle:
            json.dump(langs2, filehandle)

        language_index = {row['l']: i for i, row in enumerate(langs2)}
        return language_index