使用python进行CSV数据分析

时间:2016-03-17 21:21:03

标签: python csv python-3.x pandas matplotlib

我应该分析csv文件中的数据。我需要可视化和打印:

  1. 网站流量图(访问量最大)
  2. 访问每个网站的用户数
  3. 网上花时间
  4. 如何使用此数据分别对2014年和2015年进行第一次(网站流量图表):

    address            used_at
    am.ru              2014         413071
                       2015         183402
    auto.ru            2014        9122342
                       2015        6923367
    avito.ru           2014       84503151
                       2015       87688571
    avtomarket.ru      2014         106849
                       2015          95927
    cars.mail.ru/sale  2014         211456
                       2015         167278
    drom.ru            2014       11014955
                       2015        9704124
    e1.ru              2014       28678357
                       2015       27961857
    irr.ru/cars        2014         222193
                       2015         133678
    

3 个答案:

答案 0 :(得分:3)

我已经生成了样本输入数据(3个网站,时间跨度:2年,100,000个条目),因为您没有提供。

代码:

import matplotlib.pyplot as plt
import pandas as pd

df = pd.read_csv('avito_trend.csv', parse_dates=['ts'], usecols=['userid','site','ts','duration'])

print('Time spent online per web site')
print(df.groupby('site').agg({'duration': 'sum'}))

print('Time spent online per web site, per year')
print(df.groupby([df.ts.dt.year, 'site']).agg({'duration': 'sum'}))

# calculating stats
stats = df.groupby([df.ts.dt.year, 'site'], sort=True)['userid'] \
          .count() \
          .reset_index() \
          .rename(columns={'userid':'visits'}) \


stats = stats.set_index(stats.ts.astype(str) + ': ' + stats.site) \
             .drop(['ts','site'], axis=1)

# plot part
fig = plt.figure(figsize=(16,9))
ax = fig.add_subplot(111)

title = 'site statistics (visitors)'

stats.plot(kind='barh', ax=ax, title=title, color=['grey'], legend=None)

[ax.annotate(str(visits), (stats.values.max()/2, i))
 for i, visits in enumerate(stats['visits'].tolist())]

plt.show()
fig.savefig('stats.png',dpi=100,bbox='Tight')

输出:

Time spent online per web site
                duration
site
aliexpress.com  16603827
avito.ru        16560223
rozetka.ua      16731197

Time spent online per web site, per year
                     duration
ts   site
2014 aliexpress.com   8242863
     avito.ru         8288967
     rozetka.ua       8392353
2015 aliexpress.com   8360964
     avito.ru         8271256
     rozetka.ua       8338844

enter image description here

PS请始终提供样本输入(5-10行)和预期输出(基于样本数据)

答案 1 :(得分:1)

如果您只想在csv中可视化和打印行,则以下代码应该可以正常工作。

table = []
with open('avito_trend.csv') as fin:
    reader = csv.reader(fin)
    for row in reader:
        table.append(row)
print(table)

答案 2 :(得分:0)

你需要包含你使用的csv文件的样子,如果我不知道我在引用什么,就无法帮助。

作为提示,您可以使用pandas read_csv方法,而不必使用csv。

ex:infile=pd.read_csv("avito_trend.csv")