代码之家  ›  专栏  ›  技术社区  ›  natemcintosh

大熊猫(和海生)国家与年份的小提琴谱

  •  0
  • natemcintosh  · 技术社区  · 6 年前

    我在学熊猫,(看 these helpful videos )现在在玩不明飞行物观察台

    import pandas as pd
    ufo = pd.read_csv('https://raw.githubusercontent.com/justmarkham/pandas-videos/master/data/ufo.csv')
    ufo.head()
    
    ufo.Time    = pd.to_datetime(ufo.Time)
    ufo['Year'] = ufo.Time.dt.year
    ufo.head()
    

    现在,我想用Seaborn做一个 violinplot 每个州(在x轴上)和年份(在y轴上)。因此,该图显示了任何给定年份、任何给定状态下的目击频率密度。

    如果我用

    ufo.State.value_counts()
    

    我可以得到每个州所有计数的熊猫系列。但是,我该如何按年度划分这些数据呢?不知怎么的,我需要得到每个州每年看到不明飞行物的数据?

    我是不是在正确的轨道上创造一个海生小提琴情节?还是完全错了方向?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Toto Lele    6 年前

    根据中所示的示例 violinplot 以下示例的文档:

    ax=sns.violinplot(x=“day”,y=“total_bill”,data=tips)

    通过将列名提供给 x= 和y轴到 y= 参数。下面的代码显示 tips 变量。

    In [   ]: tips.head()
    Out[   ]: 
       total_bill   tip     sex smoker  day    time  size
    0       16.99  1.01  Female     No  Sun  Dinner     2
    1       10.34  1.66    Male     No  Sun  Dinner     3
    2       21.01  3.50    Male     No  Sun  Dinner     3
    3       23.68  3.31    Male     No  Sun  Dinner     2
    4       24.59  3.61  Female     No  Sun  Dinner     4
    

    你的问题是用 小提琴谱 ,要显示X轴 ufo.State 以及要显示的Y轴 ufo.Year . 因此,我相信 ufo.State.value_counts() 没有必要,甚至 groupby 自从 ufo 数据已经被很好地描述并满足violinplot的参数格式。

    你可以通过直接提供 ufo.columnName 进入之内 x= Y= . 请参见下面的代码:

    import pandas as pd
    import seaborn as sns
    import matplotlib.pyplot as plt
    
    ufo = pd.read_csv('https://raw.githubusercontent.com/justmarkham/pandas-videos/master/data/ufo.csv')
    
    ufo.head()
    
                       City Colors Reported Shape Reported State  \
    0                Ithaca             NaN       TRIANGLE    NY   
    1           Willingboro             NaN          OTHER    NJ   
    2               Holyoke             NaN           OVAL    CO   
    3               Abilene             NaN           DISK    KS   
    4  New York Worlds Fair             NaN          LIGHT    NY   
    
                     Time  Year  
    0 1930-06-01 22:00:00  1930  
    1 1930-06-30 20:00:00  1930  
    2 1931-02-15 14:00:00  1931  
    3 1931-06-01 13:00:00  1931  
    4 1933-04-18 19:00:00  1933  
    
    
    ufo.Time    = pd.to_datetime(ufo.Time)
    ufo['Year'] = ufo.Time.dt.year
    
    fig, ax = plt.subplots(figsize=(12,8))
    ax = sns.violinplot(x=ufo.State, y=ufo.Year)
    # ax = sns.violinplot(x='State', y='Year', data=ufo)    # Works the same with the code one line above
    plt.show()
    

    Violinplot of UFO sightings