大熊猫(和seaborn)小提琴状态与年份

时间:2018-06-03 03:14:10

标签: python pandas seaborn

我正在学习熊猫,(看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为每个状态(在x轴上)和年份(在y轴上)制作violinplot。因此,该图显示了在任何给定年份任何给定年份的目击频率密度。

如果我使用

ufo.State.value_counts()

我可以获得每个州的所有罪名的熊猫系列。但是,如何按年分隔这些数据呢?我不知何故需要每个州每年获得不明飞行物的数据吗?

我是否正在创造一个Seaborn小提琴情节?还是走错了路?

1 个答案:

答案 0 :(得分:2)

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

  

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

您可以通过将列名称x=和y轴提供给y=参数,将所需的列直接分配到x轴。以下代码显示了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

您的问题是使用violinplot绘图,x轴显示ufo.State,y轴显示ufo.Year。因此,我认为ufo.State.value_counts()是不必要的,甚至是groupby,因为ufo数据已经很好地描述并且满足小提琴图的参数格式。

您可以通过直接向ufo.columnNamex=提供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