python分析UFO报道数据

本文通过Python的numpy、pandas及matplotlib库对UFO目击数据进行清洗与可视化分析,探讨了UFO出现的频率最高的年份、月份、地点及形状。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python+numpy、pandas、matplotlib库分析UFO数据

#导入库与数据
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

df1=pd.read_csv('nuforc_events.csv')
df=df1.dropna() #把包含缺失值的整行删除
# print(df.head)
year=np.array(df['Year'][0:109991])
month=np.array(df['Month'])
state=np.array(df['State'])
shape=np.array(df['Shape'])

#获取字体
plt.rcParams['font.sans-serif']='Microsoft YaHei' 
#查看表格中各数据的数据类型
df.dtypes

在这里插入图片描述

下面需解决的四个问题:

1·UFO出现频率最高的年、月

2·UFO出现频率最高的州

3·UFO出现形状次数最多的为哪一类

4·UFO出现的持续时间一般多长

1·分析UFO出现次数最多的年

#因1905年后记录数据较少,所以选取1905年后的时间数据
year=np.array(df['Year'][0:109991])

year_df = pd.value_counts(year).sort_values(ascending=False)
# value_counts()是一种查看表格某列中有多少个不同值的快捷方法,并计算每个不同值有在该列中有多少重复值。

# 绘制柱状图
plt.figure(figsize=(12,8),dpi=100)
plt.ylabel('出现次数')
plt.title('UFO年份出现次数统计')
year_df.plot.bar()

plt.show()

在这里插入图片描述


·value_counts()
是一种查看表格某列中有多少个不同值的快捷方法,并计算每个不同值有在该列中有多少重复值。
·df. sort_values()
作用:既可以根据列数据,也可根据行数据排序。
注意:必须指定by参数,即必须指定哪几行或哪几列;无法根据index名和columns名排序(由.sort_index()执行)

调用方式

DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last')

axis:{0 or ‘index’, 1 or ‘columns’}, default 0,默认按照列排序,即纵向排序;如果为1,则是横向排序。
by:str or list of str;如果axis=0,那么by=“列名”;如果axis=1,那么by=“行名”。
ascending:布尔型,True则升序,如果by=[‘列名1’,‘列名2’],则该参数可以是[True, False],即第一字段升序,第二个降序。
inplace:布尔型,是否用排序后的数据框替换现有的数据框。
kind:排序方法,{‘quicksort’, ‘mergesort’, ‘heapsort’}, default ‘quicksort’。似乎不用太关心。
na_position:{‘first’, ‘last’}, default ‘last’,默认缺失值排在最后面。

·df. sort_index()
作用:默认根据行标签对所有行排序,或根据列标签对所有列排序,或根据指定某列或某几列对行排序。
注意:df. sort_index()可以完成和df. sort_values()完全相同的功能,但python更推荐用只用df. sort_index()对“根据行标签”和“根据列标签”排序,其他排序方式用df.sort_values()。

调用方式

sort_index(axis=0, level=None, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True, by=None)

axis:0按照行名排序;1按照列名排序
level:默认None,否则按照给定的level顺序排列—貌似并不是,文档
ascending:默认True升序排列;False降序排列
inplace:默认False,否则排序之后的数据直接替换原来的数据框
kind:排序方法,{‘quicksort’, ‘mergesort’, ‘heapsort’}, default ‘quicksort’。似乎不用太关心。
na_position:缺失值默认排在最后{“first”,“last”}
by:按照某一列或几列数据进行排序,但是by参数貌似不建议使用
【原文链接:https://blog.youkuaiyun.com/weixin_43064185/article/details/105093891】


2·出现频率最高的月份

month=np.array(df['Month'])
month_df = pd.value_counts(month).sort_index(axis=0)

#绘制折线图
plt.figure(figsize=(8,5),dpi=100)
plt.xlabel('月份')
plt.ylabel('出现次数')
plt.title('UFO出现月份分析')
month_df.plot(xticks=range(1,13))

plt.show()

在这里插入图片描述


折线图绘制
x、y轴:fontsize的值则为文字的大小
labelsize的值为刻度数字的大小

调用方式

plt.plot(x, y, linestyle, linewidth, color, marker,
     markersize, markeredgecolor, markerfactcolor,
     markeredgewidth, label, alpha)

linestyle:指定折线的类型,可以是实线、虚线、点虚线、点点线等,默认为实线。
linewidth:指定折线的宽度。
marker:可以为折线图添加点,该参数是设置点的形状。
markersize:设置点的大小。
markeredgecolor:设置点的边框色。
markerfactcolor:设置点的填充色。
markeredgewidth:设置点的边框宽度。
label:为折线图添加标签,类似于图例的作用。
labelsize的值为刻度数字的大小
fontsize的值则为文字的大小
【原文链接:https://blog.youkuaiyun.com/weixin_48615832/article/details/108466201】


3.出现频率最高的州

state=np.array(df['State'])
state1=pd.value_counts(state).sort_values(ascending=False)
state_df = state1[:25]#取出现次数前25的形状

plt.figure(figsize=(9, 6), dpi=100)
plt.axes(aspect='equal') 
plt.pie(x=state_df, pctdistance=0.9,
        startangle=45, autopct='%.1f%%', shadow=False,
)
plt.pie(state_df, radius=0.65, colors="w")#画一个白色圆,空心效果
#显示排前10的州的图例
plt.legend(state[:10], bbox_to_anchor=(0.9, 0.92))
plt.title('出现州次数占比图', fontsize=15)
plt.show()

在这里插入图片描述
饼状图

参数说明:
x:数组,绘制饼状图的数据。  
[explode]:默认值为None的可选参数。若非None,则是和x相同长度的数组,用来指定每部分的离心偏移量。  
[labels]:列表,指定每个饼块的名称,默认值None,为可选参数。  
[colors]:特定字符或数组,指定饼图的颜色,默认值None,为可选参数。  
[autopct]:特定字符,指定饼图中数据标签的显示方式,默认值None,为可选参数。  
[pctdistance]:浮点数,指定显示比例距离圆心的距离。默认值0.6,为可选参数。  
[labeldistance]:浮点数,指定每个扇形对应标签与圆心的距离,默认值1.1,为可选参数。  
[startangle]:浮点数,指定从x轴逆时针旋转饼图的开始角度,默认值None,为可选参数。  
[radius]:浮点数,指定饼图的半径,默认值1,为可选参数。  
[textprops]:字典,设置文本对象的字典参数,默认值None,为可选参数。  
**kwargs:不定长关键字参数,用字典形式设置条形图的其它参数。
【原文链接:https://blog.youkuaiyun.com/qq_32532663/article/details/113631551】

4.出现次数最多的UFO形状

shape=np.array(df['Shape'])
shape1 = pd.value_counts(state).sort_values(axis=0,ascending=True)
shape_df=shape[:25]
#shape_df

def read_data():
#     shape=np.array(df['Shape'])
#     shape_df = pd.value_counts(state).sort_values(ascending=False)

    #采用数据字典统计出现次数
    dic={}
    for item in shape_df:
        if item in dic.keys():
            dic[item]+=1
        else:
            dic[item]=1
    a=[]
    b=[]
    for key in dic:
        a.append(key)        
        b.append(dic[key])
    size=[]
    t=sum(b)
    label=a
    #计算每种类型所占的比例
    for u in b:
        i=u/t
        size.append(i)
    plt.title('出现形状次数饼状图')
    plt.pie(size,labels=label,autopct='%.0f%%',
            shadow=False,startangle=150,
            labeldistance=1.1,pctdistance=1,radius=0.95
            )
    
    plt.show()
    
if __name__ == '__main__':
    plt.figure(figsize=(6,6),dpi=100)
    read_data()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值