首页 > 解决方案 > Python从输入文件中绘制数据

问题描述

我需要从以前的作业中获取天气数据并制作各种图表。我最麻烦的数据集是描述。到目前为止,我只有数据文件。我知道我需要运行一个 for 循环来读取它并使数据可绘制。到目前为止,我所做的只是在文件中读取。

descriptions = open('descriptions.txt', 'r',encoding=('utf-8'))

数据看起来像这样。我最终需要做的是制作一个条形图,计算某些关键字的实例(例如下雨或阵雨为雨。晴天/晴天等)。我将如何运行循环以使日子与正确的城市相关联?然后我如何将字数与正确的日子联系起来?

克利夫兰数据
星期天克利夫兰
阵雨 可能有阵雨和大雾,大雨和阵阵大雾,然后有轻微阵雨,晴天和微风,晴,晴,多云
星期一克利夫兰
晴,晴,大部分晴,阵雨然后阵雨,阵雨,阵雨然后部分阵雨
周二阳光明媚,微风轻拂克利夫兰
晴朗,多云,有小阵雨,然后下雨,下雨,可能有阵雨,部分多云和大风

底特律数据
周日 底特律
小概率阵雨,逐渐晴天,晴天,晴天,晴天,多云,然后可能有阵雨 星期一
底特律
晴天,晴天,部分多云,然后可能阵雨,阵雨,偶有阵雨,然后偶有雨/雪,部分晴天,大部分晴天
底特律
有阵雨,有轻微阵雪,然后有阵雨/降雪,有轻微阵雪,然后基本晴,晴,晴,晴

标签: pythonfor-loopmatplotlib

解决方案


好的,这是我的看法(评论中的解释;如果您有问题,请询问他们):

# opens and reads the whole file
with open('text_file.txt') as file:
    data = file.read()

# splits read data in groups between whom are \n\n and stores them in a list
data = data.split('\n\n')

# creates a dictionary
data_by_city = {}

# this loops over each section in the data list (each city info block)
for item in data:
    # creates a dictionary to store text info
    city_data = {}
    
    # for each city info entry removes all \n
    item = item.replace('\n', ' ')
    # splits each city info by spaces
    split_item = item.split(' ')
    # checks if word is in city_data and if not then adds it if it exists adds up the count
    for word in split_item:
        if word not in city_data.keys():
            city_data[word] = 1
        else:
            city_data[word] += 1
    
    # creates an entry for data_by_city and makes the key name of the city and city_data as the assigned value
    data_by_city[split_item[0] if split_item[0] != '' else split_item[1]] = city_data

# prints data_by_city
print(data_by_city)

这是输入文件(行显示文件的边界):

克利夫兰数据 星期天克利夫兰阵雨 可能有阵雨和大雾,大雨和阵阵大雾,然后有轻微阵雨,晴天和微风,晴,晴,多云 星期一克利夫兰晴,晴,大部分晴,阵雨然后阵雨,阵雨,阵雨然后部分阵雨周二阳光明媚,微风轻拂 克利夫兰 晴朗,多云,有小阵雨,然后下雨,下雨,可能有阵雨,部分多云和大风

底特律数据 周日 底特律 小概率阵雨,逐渐晴天,晴天,晴天,晴天,多云,然后可能有阵雨 星期一 底特律晴天,晴天,部分多云,然后可能阵雨,阵雨,偶有阵雨,然后偶有雨/雪,部分晴天,大部分晴天底特律有阵雨,有轻微阵雪,然后有阵雨/降雪,有轻微阵雪,然后基本晴,晴,晴,晴

并且两个信息块之间有两个空格,并且行和信息块之间没有空格


推荐阅读