【问题标题】:CSV data analysis with python [closed]使用python进行CSV数据分析[关闭]
【发布时间】:2016-07-04 11:18:48
【问题描述】:

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

  1. 网站流量图(访问量最大)
  2. 访问每个网站的用户数
  3. 在网站上在线花费的时间

如何使用这些数据分别对 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

【问题讨论】:

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


【解决方案1】:

我生成了示例输入数据(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

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

【讨论】:

  • 如果我需要分别打印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
  • @ldevyataykina,您应该使用预期输出示例更新您的问题
【解决方案2】:

如果您只想可视化和打印 csv 中的行,那么下面的代码应该可以工作。

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

【讨论】:

    【解决方案3】:

    您需要包含您使用的 csv 文件的外观,如果我不知道我在引用什么,将无济于事。

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

    例如:infile=pd.read_csv("avito_trend.csv")

    【讨论】:

    • 我使用带有 498430 个字符串的 csv 文件。它们看起来都像 dc2829da4d79ad3f5549588471f0d534,"avito.ru",2014-11-26 22:35:08,132,7。 1 - 用户 ID; 2 - 网站; 3 - 访问数据; 4 - 网站在线时间,5 - 不重要
    • 你在哪里卡住了?您提出一些重大问题,您应该启动一些代码,或者将项目分解为更易于管理的任务..
    • 我需要按访问年份分组。但我的日期格式为 2014-11-26 22:35:08,但我不知道我可以这样做
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-05
    相关资源
    最近更新 更多